我有一个类似:
的类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);
}
};