gpt4 book ai didi

c++ - 部分模板特化仅限于某些类型

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:08:11 24 4
gpt4 key购买 nike

是否可以编写仅用于类类型的部分模板特化,例如,从特定类继承或遵守可以通过类型特征表达的某些其他约束? 即,像这样:

class A{}

class B : public A{}

template<typename T>
class X{
int foo(){ return 4; }
};

//Insert some magic that allows this partial specialization
//only for classes which are a subtype of A
template<typename T>
class X<T>{
int foo(){ return 5; }
};

int main(){
X<int> x;
x.foo(); //Returns 4
X<A> y;
y.foo(); //Returns 5
X<B> z;
z.foo(); //Returns 5
X<A*> x2;
x2.foo(); //Returns 4
}

最佳答案

通常如果你想要条件部分模板特化,你需要提供一个额外的参数,然后使用 enable_if:

template<typename T, typename=void>
class X {
public:
int foo(){ return 4; }
};

template<typename T>
class X<T, std::enable_if_t<std::is_base_of_v<A, T>>> {
public:
int foo(){ return 5; }
};

关于c++ - 部分模板特化仅限于某些类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12161033/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com