gpt4 book ai didi

c++ - 在不实例化模板的情况下访问模板类的公共(public)静态成员?

转载 作者:太空狗 更新时间:2023-10-29 20:27:55 25 4
gpt4 key购买 nike

我有一个模板类,想从它外部访问一个公共(public)静态变量,但如果不实例化模板,我想不出任何方法来做到这一点。这段代码:

template<class T>
class TemplatedClass {
public:
static const int static_member = 10;
};

...

int i = TemplatedClass::static_member;

产生以下错误:“在没有模板参数的情况下使用了‘模板类 TemplatedClass’。”

如果我在访问变量时实例化类:

int i = TemplatedClass<int>::static_member;

错误消失了。我宁愿不必在上下文中实例化模板,在上下文中使用虚拟类型参数实际上没有意义,只是为了抑制错误。如果必须,最好使用什么虚拟类型?我尝试了 <> 和 ,但都没有用。

最佳答案

无法完成,因为特化可能会覆盖该值,即:

template<class T>
class TemplatedClass : public BaseClass
{
static const int value = 42;
};

template<>
class TemplatedClass<StarTrek>
{
static const int value = 47;
}

这样你会得到不同的值:

TemplatedClass<StarTrek>::value != TemplatedClass<void>::value      

如果要让值相等,我强烈建议你添加一个非模板基类:

class BaseClass {
public:
static const int value = 42;
};

template<class T>
class TemplatedClass : public BaseClass
{
...
}

实例化或显式虚拟类型(即 void)可能有效,但您可能会遇到编译错误,具体取决于您使用模板参数的方式。

int x = TemplatedClass<void>::value;

因此,编写清楚地表明您的意图的代码,即所有实例化的公共(public)值不应在依赖于类型的模板类中。如果您做不到,请更详细地解释您要做什么。

关于c++ - 在不实例化模板的情况下访问模板类的公共(public)静态成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14847141/

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