如何将类型名称 T 限定为特定类型?考虑以下内容:
template <typename T>
struct Worker {
// T can only be certain type allowing specific functionality.
// i.e T needs to be a product of some interface, support some functions, say T::toString(), T::print(), T::get().
// Do something with T
};
这是我通常最终做的事情:
struct WorkableType {
std::string toString() { return ""; }
int get() { return 0;}
}
struct WorkabelTypeA : WorkableType {
std::string toString() { return "A"; }
int get() { return 1;}
};
//Similarly
struct WorkableTypeB : WorkableType;
使用静态断言和 std::is_base_of
:
template <typename T>
struct Worker {
static_assert(std::is_base_of<WorkableType, T>::value, "Needs workable type");
// Do something with T
};
有没有其他的设计模式,更符合C++的方式来限制不良类型的模板被意外实例化呢?
编辑:当C++概念成为标准时,似乎这个问题会得到更好的解决。在那之前,static_assert可能比enable_if更加干净和详细。