【发布时间】:2019-08-20 14:30:52
【问题描述】:
我发现了一些问题,它们提出了类似的问题,但找不到针对我的特定案例的直接答案。 模板的整个语法让我很困惑,所以我可能只是误解了一些东西。
我有一个应该接受所有类型的类模板。 简单例子:
template <class T>
class State {
public:
void set(T newState);
T get();
private:
T state;
};
template <class T>
void State<T>::set(T newState){
state = newState;
}
template <class T>
T State<T>::get(){
return state;
}
现在我想为一组类型创建一个专门的模板,为这些类型添加额外的功能。从我目前发现的情况来看,我可以使用所谓的 type_traits,但它们究竟是如何用于实现这一点的对我来说仍然是一个谜。
F.e.这种针对 int 类型的特化,而不是仅仅为 int 类型编写,我还希望允许所有其他 int 和 float 变体。我找到了 std::is_arithmetic 但不知道如何利用它来实现这一点。
template <>
class State <int> {
public:
void set(int newState);
int get();
int multiplyState(int n);
private:
int state;
};
void State<int>::set(int newState){
state = newState;
}
int State<int>::get(){
return state;
}
int State<int>::multiplyState(int n){
return state*n;
}
【问题讨论】:
-
查找
std::enable_if,sfinae 和 部分专业化 ;)