一些思想实验...成分 1:(预编译)共享库中的一个类,它具有一个函数,该函数接受一个指向从 ostream 派生的对象的指针:
void ClassName::SetDefaultStream(std::ostream *stream)
成分 2:
我自己的类派生自 std::ostream,带有一些通用的模板化流运算符:
class MyStream : public std::ostream
{
public:
template <typename T> MyStream &operator<<(const T &data)
{
std::cout << data;
return *this;
}
}
现在,如果我将此类实例化的地址传递给 SetDefaultStream 方法,会发生什么情况?在编译时,编译器不知道什么类型将应用于共享类中的流,所以肯定不会合成任何代码?会不会编译不通过,运行会不会编译后崩溃,电脑会冒烟吗?
最佳答案
你的模板化成员在库中是不可见的,因为它不是基础 std::ostream 的虚拟成员。不会出现任何问题。
关于c++ - 传递给共享库的模板函数 (c++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/602112/