c++ - 模板按值返回,指针在cpp/h

标签 c++ templates c++11

在我的头文件中我有一个函数

template<class T>
T Sum( T a, T b) const;

它返回一个值,所以我可以调用

auto x = Sum<int>( 10, 10 );

但我也希望能够返回一个指针

auto y = Sum<int*>(10, 10 );

但是我如何在头类和源文件中定义返回指针或值

// return value
template <class T>
T Sum (T a, T b)
{
  T result;
  result = a + b;
  return result;
}

// return as a pointer
template <class T>
T* Sum (T a, T b)
{
  T result = new T();
  *result = a + b;
  return result;
}

最佳答案

没有简单的解决方案。类模板具有部分特化,它允许您特化所有指针类型。但是功能只有完全特化。你可以写

template <>
int* Sum<int*> (int a, int b)
{
  int result = new int();
  *result = a + b;
  return result;
}

现在,类模板 及其部分特化可以具有静态方法,这是一种可行的解决方法。或者,使用 std::enable_ifstd::is_pointer定义两个不相关 Sum<>模板,其中一个为指针启用,另一个为指针不启用。

关于c++ - 模板按值返回,指针在cpp/h,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38927586/

相关文章:

c++ - 使用 boost::lexical_cast 捕获溢出

c++ - 相互包含的派生和专用模板类

c++ - clang++、boost::spirit 和 c++11

c++ - 生成随机数出错

c++ - Cereal - 无法反序列化 json 字符串 - 未处理的异常

java - ndk-build 'JNI_CreateJavaVM' 未在此范围内声明

c++ - C++ 中的从属名称与非从属名称

c# - 从模板创建 PDF

c++ - 如何实现从模板参数返回 vector 的模板函数?

c++:自旋锁或互斥比较(简单计算)