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

标签 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';
}

当我尝试编译它时,出现以下错误:

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/

相关文章:

c++ - 为什么此类声明在 Visual Studio 上不起作用

c++ - 使用 boost::fusion::for_each 时传递/绑定(bind)参数

c++ - 在类中封装多个 if 语句的最简单方法?

c++ - 如何在 Xcode 中正确导入文件

c++ - 是否可以在模板化类之外获取分配的模板类型?

c++ - 这些值模板参数是否相同?

C++ meta-splat 函数

haskell - "reify"和 "reification"在(函数式?)编程的上下文中意味着什么?

c++ - 调试高内存使用率

Java 可选与 C++ 可选