我有一个名为w32file的模板类,可以处理wchar_t和char两种类型。声明如下:
现在我知道我可以把这些成员方法的所有实现放在头文件中,然后它们将被编译为使用我的模板的任何对象文件。 然而,我并不真正想要这样做,因为这个类将会被广泛使用,这将导致很多重复的对象代码。
所以目前,我有一个连接到静态库的cpp文件,它执行以下操作:
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);
}
现在,我的目标代码只被创建一次,但我不得不在源代码中创建两份实质上相同的方法副本。 有人知道如何解决这个问题吗?是否有一种模板化的方式可以将两个实现都扩展到我的对象文件中?
const
- 这将允许编译器进行更多的优化,并且实际上对于正确性可能是必要的。你的isDirectory
方法肯定应该是const
的。 - Kerrek SBinline bool isDirectory() const;
放在声明中,否则一个const w32file<char> tempFile = ...;
就无法访问isDirectory()了,是吧? - Tim Meyer