gpt4 book ai didi

c++ - 模板化运算符<<显式实例化和 header

转载 作者:行者123 更新时间:2023-11-30 02:13:03 25 4
gpt4 key购买 nike

通常对于我的模板类,我在 .hpp 中包含声明.t.hpp 中的文件和模板化实现代码文件。我在 .cpp 中显式实例化该类文件:

template class MyClass< AnotherClass >;

其目标代码被放入库中。

问题是,如果我尝试使用 operator<< 打印对象,在 .hpp 中声明文件并在 .t.hpp 中定义文件为:

template<class T>
std::ostream& operator<<( std::ostream& os, const MyClass<T>& c)
{
os << "Hello, I am being output.";
return os;
}

我收到链接器错误,指出正确的符号未定义。

我理解这是因为这个模板化函数在类创建时没有显式实例化。除了包含 .t.hpp 之外,还有其他方法可以解决此问题吗?任何时候我想使用operator<<在类上,或将模板化函数代码移至 .hpp文件?我可以显式实例化函数代码吗?

最佳答案

您可以显式实例化函数模板

template std::ostream& operator<<(std::ostream&, const MyClass<int>&);

使用 T = int 实例化特化。如果可以推导出所有模板参数(例如,从类型 MyClass<int> 推导出来),则可以省略模板参数括号。如果不能,例如因为模板参数不会出现在函数参数类型中,则可以明确指定它

template<typename T> void f() { }
template void f<int>();

关于c++ - 模板化运算符<<显式实例化和 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1013979/

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