我需要一个 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
还需要全局声明。我正在尝试做的事情没有用,我认为这在编译时毕竟是不可能的。