【发布时间】:2009-05-26 12:58:09
【问题描述】:
我需要一个 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 也需要全局声明。我正在尝试做的事情没有用,我认为这在编译时毕竟是不可能的。
【问题讨论】:
-
听起来你需要一个函数模板,因为类模板要求你明确指定模板类型参数。您能否发布一个使用示例来说明您要做什么?
-
@j_random_hacker:您可以将模板留空并拥有一个专门的类...您不必指定模板类型。
标签: c++ templates metaprogramming