返回类型不可知模板类成员功能

Return type agnostic template class member function

本文关键字:成员 功能 不可知 返回类型      更新时间:2023-10-16

我有一个类似:

的类
tempate<class TReturn>
struct MyClass {
 template<class T>
 TReturn doSomething(const T &t) {
  // Do something
  return someValue;
 }
};

现在TretTurn甚至可以是无效的,但是如果它是无效的,我最终不想返回语句,并且该功能中的一些较小的代码。我想要的是不同的功能主体,具体取决于返回类型。我正在使用C 11,因此,如果我无法使用ConstexPR。在普通C 11中有什么方法可以解决这个问题?

您可以为void提供专业化:

tempate<>
struct MyClass<void> {
 template<class T>
 void doSomething(const T &t) {
  // Do something else
 }
};

实际上该类实际上比您显示的要大,并且您只想专业化这个功能而不是整个功能,那么a(当仅一小部分时,将TReturn作为类的参数可能是不明智的。类取决于它,但是b(有一些方法可以模拟这一点。例如。您可以通过间接通过辅助类别的类别(与功能模板不同,类模板允许部分专业化(来"部分专业"该方法。这样的东西:

tempate<class TReturn> struct MyClass;
namespace internal {
  template <typename TReturn, typename T>
  class MyClassDoSomethingHelper {
    static TReturn Run(MyClass<TReturn>* that, const T &t) {
      // do something
      return someValue;
    }
  };
  template <typename T>
  class MyClassDoSomethingHelper<void, T> {
    static void Run(MyClass<void>* that, const T &t) {
      // do something else
    }
  };
}  // namespace internal
tempate<class TReturn>
struct MyClass {
 template<class T>
 TReturn doSomething(const T &t) {
   return internal::MyClassDoSomethingHelper<TReturn, T>::Run(this, t);
 }
};