我正在尝试了解有关 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';
}
当我尝试编译它时,出现以下错误:
error: expected ')' before 't'
A<T>(T t) : t(t) {}
我四处搜索,但错误非常普遍,所以我没有找到解决问题的确切方法。
如果重要的话,我正在编译 -std=c++14
使用 gcc(自制 gcc 5.3.0)5.3.0。
最佳答案
删除 <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;
};
关于c++ - 如何构建仅算术模板对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36438895/