这是我的情况。我有一个类,一个带有 int 模板参数的模板类,类似于这个。
template <int n>
class example
{
bool some_method()
{
return n > 1;
}
}
现在,我想做的是编写一个函数,它接受一个指向此类对象的指针并使用它。对于我必须做的事情,不需要知道模板参数,所有模板参数的代码看起来都一样。就像是:
bool function(example* part1, bool part2)
{
return part1->some_method() && part2;
}
但显然编译器提示缺少模板参数。我有没有机会在不编写模板函数的情况下实现这样的函数?这个例子很小,但现实生活中的例子会更加冗长和复杂。
在启用 c++11 的 Gcc 4.8.1 上工作,https://godbolt.org/z/EXdCe9 goldbolt 上的示例以显示错误。
最佳答案
您将不得不使用某种形式的间接。在这种情况下,最明显的形式是继承和虚方法:
class example_base {
public:
virtual bool some_method() = 0;
};
template <int n>
class example: public example_base {
public:
virtual bool some_method() override
{
return n > 1;
}
};
bool function(example_base* part1, bool part2)
{
return part1->some_method() && part2;
}
如果您不能(或想要)修改原始类
example
,您可以使用虚拟方法创建一个包装器:template <int n>
class example {
public:
bool some_method()
{
return n > 1;
}
};
class example_wrapper_base {
public:
virtual bool some_method() = 0;
};
template <int n>
class example_wrapper: public example_wrapper_base {
public:
example_wrapper_base(example<n>* e): e(e) {}
virtual bool some_method() override { e->some_method(); }
private:
example<n>* e;
};
bool function(example_wrapper* part1, bool part2)
{
return part1->some_method() && part2;
}
关于c++ - 让函数在不指定模板参数的情况下获取指向模板对象的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62196594/