作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我需要一个 C++ 模板,在给定类型和该类型的对象的情况下,它可以根据类型是否为整数做出决定,同时能够访问实际对象。我试过了
template <typename T, T &N>
struct C {
enum { Value = 0 };
};
template <int &N>
struct C<int, N> {
enum { Value = N };
};
但它不起作用。有什么方法可以实现类似的目标吗?
编辑
我试图实现的是这样的,它会在编译时发生:
if (type is int) {
return IntWrapper<int_value>
else {
return type
}
您实际上可以将指针或引用传递给模板实例化中的对象,如下所示:
struct X {
static const int Value = 5;
};
template <X *x>
struct C {
static const int Value = (*x).Value;
};
X x;
std::cout << C<&x>::Value << std::endl; // prints 5
但显然所有这些完成的是通过推断x
的类型来初始化模板,并且x
也需要全局声明。对我正在尝试做的事情毫无用处,我认为这毕竟在编译时是不可能的。
最佳答案
您尝试做的不是有效的 C++ 模板。您不能使用任意对象作为模板参数,您只能使用类型、整数文字以及在某些特殊情况下的字符串文字。
关于C++模板特化问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/910542/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 4 年前。
正如您在 this travis.yml 中看到的那样文件,我的代码依赖于一些第三方库,我在构建项目之前将它们安装在远程系统上。 Travis 每次推送提交时都会下载并构建这些库,这可以避免吗?我的意
我是一名优秀的程序员,十分优秀!