如果我使用诸如的模板定义类
template<class K, class V>
class myclass {
...
};
Run Code Online (Sandbox Code Playgroud)
有没有办法将myclass定义的对象传递给函数而不使用函数的模板?换句话说,对于每个接受myclass对象的函数,是否还需要使用模板<class K,class V>来定义?
这样做的主要原因是我想定义一组作用于myclass对象的静态函数,这样我就可以在cpp文件中而不是在头文件中限制这些函数的范围.
使模板类继承自某个基类:
template<class K, class V>
class myclass : mybaseclass { ... };
Run Code Online (Sandbox Code Playgroud)
其中基类将模板的公共功能声明为纯虚拟.这样,你只有一个功能,而不是为每一个功能K,V组合.
你不能.类模板不是类 - 它只是一个模板.只有插入模板参数后才能获得类型,并且对于每个不同的参数集,您将获得不同的,不相关的类型.
也许你可以运行某种类型的擦除方案,你有一个容器类,它包含一个抽象的成员指针,并为每种类型实例化一个具体的派生对象.(看看Boost.any.)
有点像这样:
class MyClassHolder { };
template <typename K, typename V>
class MyClassConcrete { };
class MyClass
{
MyClassHolder * p;
public:
template <typename K, typename V> init(...) // could be a constructor
{
p = new MyClassConcrete<K, V>();
}
};
Run Code Online (Sandbox Code Playgroud)
现在你可以让你的函数接受了MyClass,但你必须添加足够的虚函数MyClassHolder,实现它们MyClassConcrete并公开它们MyClass,你可以实现所有你想要的语义.
| 归档时间: |
|
| 查看次数: |
13471 次 |
| 最近记录: |