【发布时间】:2020-09-28 14:15:08
【问题描述】:
我是 C++ 的新手。我写了一个函数模板来总结向量中的所有元素,如下所示:
template<typename T>
inline T sumator(const std::vector<T> &sequence) {
T init = T{};
return accumulate(sequence.begin(), sequence.end(), init);
}
在不声明默认构造函数之前一切正常,而是从例如 2 个参数声明构造函数。 像这样:
class A {
private:
int a;
int b;
public:
// A() = default;
A(int aa, int bb) : a(aa),b(bb){};
A operator+(const A &right) const {
return {a + right.a, b + right.b};
}
bool operator==(const A &right) const {
return (a == right.a && b == right.b);
}
};
vector<A> bc = {{3,5},{5,5}};
A res = Adder::sumator(works);
A result = {8,10};
assert(result,res);
现在我收到如下错误:错误:没有匹配的构造函数用于初始化“A” T 初始化 = T{};
如何避免这种情况,不使用https://en.cppreference.com/w/cpp/types/is_default_constructible
UPD:我有很多类,其中一些具有默认构造函数,一些没有但具有用于 2 arg 的构造函数,一些用于 3,等等。而我要好好积累每一种情况
【问题讨论】:
-
评论不用于扩展讨论;这个对话是moved to chat。