我现在正在使用 Visual Studio。我有一个经典的宏来标记 dll api 函数和类。我的理解是标记一个类 dllexport 使它的功能可以从其他二进制文件中看到,从而可以使用 dll 提供的类型。
我想知道当类包含模板成员函数时 dllexport 和 dllimport 的行为是什么?我最初的怀疑是它只是忽略它们,而这正是我想要的。
但是我在 MSDN 中找不到他们解释这个特定案例的位置(尽管他们解释了其他案例)。
例子:
class MY_API Log // MY_API is either __declspec( dllexport ) or __declspec( dllimport ) depending on if we are compiling the library or using it's header
{
public:
// is this ignored?
template< typename TypeOfSomething >
Log& write( const TypeOfSomething& something )
{
test_stream << something;
}
~Log(); // ok this is exported/imported
private:
std::stringstream text_stream;
};
我简化了代码来给出这个例子。
我怀疑的是,如果客户端代码使用 write() 函数,它将实例化模板,生成真正的函数代码,可能是内联的。在这种情况下,编译器会将其标记为“dllimport”,因为它应该与所有成员函数一样,还是什么都不做,只在客户端代码中使用该版本?