C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 如何在cpp文件中为多种类型创建模板类成员实现大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个名为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>;
}

请注意,我强烈建议将其放在标题中并将其内联!

大佬总结

以上是大佬教程为你收集整理的c – 如何在cpp文件中为多种类型创建模板类成员实现全部内容,希望文章能够帮你解决c – 如何在cpp文件中为多种类型创建模板类成员实现所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。