使用显式实例化设置类模板的方法

2024-02-15

问完后这个问题 https://stackoverflow.com/questions/3526299/c-templates-declare-in-h-define-in-hpp并阅读了大量有关模板的内容,我想知道以下类模板设置是否有意义。

我有一个名为的类模板ResourceManager只会加载一些特定的资源,例如ResourceManager<sf::Image>, ResourceManager<sf::Music>等等。显然我在 ResourceManager.h 中定义了类模板。然而,由于只有几个显式实例化,所以做类似的事情是否合适......

// ResourceManager.cpp
template class ResourceManager<sf::Image>;
template class ResourceManager<sf::Music>;
...

// Define methods in ResourceManager, including explicit specializations

简而言之,我试图找到最干净的方法来处理声明和定义模板类及其方法,其中一些可能是显式专业化。这是一个特殊情况,我知道只会使用一些显式实例化。


Yes.
这是完全合法的。

您可能想隐藏它在 typedef 后面进行模板化的事实(如 std::basic_string 所做的那样),然后在标头中添加注释以不要显式使用模板。

资源管理器.h

template<typename T>
class ResourceManager
{
    T& getType();
};

// Do not use ResourceManager<T> directly.
// Use one of the following types explicitly
typedef ResourceManager<sf::Image>   ImageResourceManager;
typedef ResourceManager<sf::Music>   MusicResourceManager;

资源管理器.cpp

#include "ResourceManager.h"

// Code for resource Manager
template<typename T>
T& ResourceManager::getType()
{
    T newValue;
    return newValue;
}

// Make sure only explicit instanciations are valid.
template class ResourceManager<sf::Image>;    
template class ResourceManager<sf::Music>;   
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用显式实例化设置类模板的方法 的相关文章

随机推荐