gpt4 book ai didi

c++ - 如何从模板类中尚 undefined symbol 中引用?

转载 作者:行者123 更新时间:2023-12-04 08:22:25 25 4
gpt4 key购买 nike

我天真地认为在模板类中我可以引用不存在的对象,因为在实例化之前它们不是必需的。但这不起作用(编译器提示未声明的 NAME):

template<typename H>
class HandlerInfoClass
{
std::string_view getName()
{
return NAME;
}
};
有没有办法在不使用预处理器或添加新模板参数的情况下克服这个问题(其中一些可能具有此上下文中不允许的类型)?

最佳答案

不,不可能引用不存在的对象。模板函数的一个关键特性是对于给定的参数,输出总是相同的。因此,在代码中实例化模板的位置并不重要,它始终会为相同的参数调用相同的函数。
您正在构建的内容看起来像是“处理程序”的特征类。写这个的正确方法是为每个不同的类型专门化类,如下所示:

template<typename H>
class HandlerInfoClass;

template<>
class HandlerInfoClass<HandlerType>
{
static std::string_view getName()
{
return "HandlerType";
}
};
如果您返回的字符串在运行时发生变化,您不应该构建一个traits 类,而是添加一个 getName()对象本身的功能。

关于c++ - 如何从模板类中尚 undefined symbol 中引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65439289/

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