我正在尝试更多地了解C ++中的元编程。我正在设计类A
,其类型为T
,其中T
是某种算术类型。我该如何构建这样的对象?
这是我的尝试:
#include <iostream>
#include <type_traits>
template <typename T,
typename = typename std::enable_if<std::is_arithmetic<T>::value, T>::type>
struct A {
A<T>(T t) : t(t) {}
T t;
};
int main() {
A<int> a{4}, b{2};
std::cout << a.t + b.t << '\n';
}
当我尝试编译时,我收到以下错误:
错误:预期')'在't'之前
A<T>(T t) : t(t) {}
我一直在搜索,但错误很通用,所以我找不到解决问题的确切方法。
如果重要,我正在使用 gcc(Homebrew gcc 5.3.0)5.3.0 编译-std=c++14
。
答案 0 :(得分:2)
从构造函数中删除<T>
。构造函数不是模板,类是。
template <typename T,
typename = typename std::enable_if<std::is_arithmetic<T>::value, T>::type>
struct A {
A(T t) : t(t) {}
T t;
};