我有一个名为w32file的模板类,可以同时使用wchar_t和char。宣布:
template <typename T>
class w32file { ... }
它有许多成员方法,例如:
inline bool isDirectory();
现在我知道我可以将这些成员方法的所有实现放在头文件中,然后将它们编译到使用我的模板的任何目标文件中。但是,我并不是真的想要这个,因为这个类会被遍地使用,并且会导致很多重复的目标代码。
所以目前,我有一个cpp文件链接到一个静态库,它执行此操作:
bool w32utils::w32file<wchar_t>::isDirectory()
{
auto dwAttr = GetFileAttributes(m_name.c_str());
return ((dwAttr & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY);
}
bool w32utils::w32file<char>::isDirectory()
{
auto dwAttr = GetFileAttributes(m_name.c_str());
return ((dwAttr & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY);
}
现在,我的目标代码只创建了一次,但我必须在源代码中创建两个基本相同的方法副本。有没有人知道这方面的方法?有没有办法以模板化的方式将两个实现扩展到我的目标文件中?
答案 0 :(得分:2)
定义模板化的函数并使用显式模板实例化:
namespace w32utils
{
template <typename T>
bool w32file<T>::isDirectory()
{
const auto dwAttr = GetFileAttributes(m_name.c_str());
return ((dwAttr & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY);
}
template class w32file<char>;
template class w32file<wchar_t>;
}
请注意,我强烈建议将其放在标题中并内联!