作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
是否可以编写仅用于类类型的部分模板特化,例如,从特定类继承或遵守可以通过类型特征表达的某些其他约束? 即,像这样:
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/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 4 年前。
正如您在 this travis.yml 中看到的那样文件,我的代码依赖于一些第三方库,我在构建项目之前将它们安装在远程系统上。 Travis 每次推送提交时都会下载并构建这些库,这可以避免吗?我的意
我是一名优秀的程序员,十分优秀!