История изменений
Исправление 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, похоже, не может.