如何构建仅算术模板对象?

时间:2016-04-05 23:34:44

标签: c++ templates metaprogramming

我正在尝试更多地了解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

1 个答案:

答案 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;
};