LINUX.ORG.RU

История изменений

Исправление hateyoufeel, (текущая версия) :

Конкретный пример чего? Твоя функция – в одном пакете, типы, с которыми ты хочешь работать – в другом. А в третьем ты всё это вместе пытаешься вызывать. Всякие C++, Rust, Haskell и даже жабы это могут. Golang, похоже, не может.

Попробуй вот такое на голанге сделать:

#include <iostream>
#include <optional>
#include <vector>
#include <list>

using std::optional;
using std::vector;
using std::list;

template<template <typename> class V, typename A>
optional<A> sum(const V<A> &a) {
  if(a.empty()) {
    return {};
  }
  auto it = a.begin();
  auto r = *it++;
  while(it != a.end()) {
    r += *it++;
  }
  return r;
}

int main() {
  vector<int> v = { 1, 2, 3, 4 }; 
  list<double> l = { 1.0, 2.0, 3.0, 4.0 };

  std::cout << "Sum of vector<int>: " << *sum(v) << std::endl;
  std::cout << "Sum of list<double>: " << *sum(l) << std::endl;

  return 0;
}

И шоп оно работало с любым контейнером и любым типом с оператором +.

Исходная версия hateyoufeel, :

Конкретный пример чего? Твоя функция – в одном пакете, типы, с которыми ты хочешь работать – в другом. А в третьем ты всё это вместе пытаешься вызывать. Всякие C++, Rust, Haskell и даже жабы это могут. Golang, похоже, не может.