提问人:Anthony Blanchette-Potvin 提问时间:8/13/2023 更新时间:8/13/2023 访问量:42
C++ - 是否可以在模板化类的方法中省略 T 类型的参数?
C++ - Possible to omit parameters of type T in the methods of a templated class?
问:
我有以下模板化类:
template<class A>
class AssetFactory
public:
virtual std::unique_ptr<Asset> CreateAsset(const AssetDescriptor& assetDescriptor, const A& args) = 0;
};
在 的某些派生类中,我不需要参数,所以我想有一个没有它的变体,使用相同的模板化类,意思是:AssetFactory<A>
args
CreateAsset
class DerivedAssetFactory : AssetFactory<???>
public:
std::unique_ptr<Asset> CreateAsset(const AssetDescriptor& assetDescriptor) override;
};
我目前的解决方案是定义一个模板专用化,用于指示“没有参数的 AssetFactory”,如下所示:void
template<>
class AssetFactory<void>
public:
virtual std::unique_ptr<Asset> CreateAsset(const AssetDescriptor& assetDescriptor) = 0;
};
然后,如果我的派生类不需要该参数,则可以从中继承。AssetFactory<void>
args
我想知道这是否通常是解决我是否应该审查我的设计的问题的方法?
谢谢!
答: 暂无答案
评论
AssetFactory<T>
virtual
AssetManager.CreateAsset<SomeArgs>({...})
CreateAsset<SomeArgs>(args)
template<class ... Ts> class AssetFactory
可能更合适。所以没有专业化,空包一无所获。std::function
和template<class ... Ts> using AssetFactory = std::function<std::unique_ptr<Asset>(const AssetDescriptor&, Ts...)>;