c – 如何在cpp文件中为多种类型创建模板类成员实现
发布时间:2020-12-16 07:26:13 所属栏目:百科 来源:网络整理
导读:我有一个名为w32file的模板类,可以同时使用wchar_t和char.宣布: template typename T class w32file { ... } 它有许多成员方法,例如: inline bool isDirectory(); 现在我知道我可以将这些成员方法的所有实现放在头文件中,然后将它们编译到任何使用我的模板
我有一个名为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); } 现在,我的目标代码只创建了一次,但我必须在源代码中创建两个基本相同的方法副本.有没有人知道这方面的方法?有没有办法以模板化的方式将两个实现扩展到我的目标文件中? 解决方法
定义模板化的函数并使用显式模板实例化:
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>; } 请注意,我强烈建议将其放在标题中并将其内联! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |