如何构建仅算术模板对象?
How can I construct arithmetic-only template objects?
我正在尝试了解有关 C++ 元编程的更多信息。我正在设计 class 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 (Homebrew gcc 5.3.0) 5.3.0.
编译
从构造函数中删除 <T>
。构造函数不是模板,class 是。
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++ 元编程的更多信息。我正在设计 class 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 (Homebrew gcc 5.3.0) 5.3.0.
从构造函数中删除 <T>
。构造函数不是模板,class 是。
template <typename T,
typename = typename std::enable_if<std::is_arithmetic<T>::value, T>::type>
struct A {
A(T t) : t(t) {}
T t;
};