作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经实现了一个纯 C++11 Any 类(基于 this code ),它类似于 boost::any 并且如果直接使用它会很好地工作。
但是我现在需要使用它作为模板参数来将参数分配给变量。看看这个:
class A {
IRecognizer<Any, Any> *_recognizer;
template <typename T1, typename T2>
A(IRecognizer<T1, T2> *x) : _recognizer(x) {
}
}
和
template<typename Symbol, typename ATNInterpreter>
class IRecognizer {
public:
virtual int getState() = 0;
};
即使我可以将每个模板参数分配给 Any 变量,我也不允许分配 IRecognizer<T1, T2> to IRecognizer<Any, Any>
.这个问题有解决方案吗?错误信息是:
Cannot initialize a member subobject of type 'IRecognizer<Any, Any> *'
with an lvalue of type 'IRecognizer<Token *, ParserATNSimulator *> *'
我使用 Any 类的原因是为了有一个可以分配给任何类引用的公共(public)类型(类似于 Java 的对象,但 C++ 没有所有其他类派生的公共(public)对象类型)。
也许这里可以采用不同的方法?我愿意接受建议。
最佳答案
您正在尝试转换 IRecognizer<T1, T2> *
到 IRecognizer<Any, Any> *
.唯一允许的指针转换是从派生类指针到基类指针(即 Derived*
到 Base*
)或更符合 cv 的相同类型指针(即 Derived*
)到 Derived const*
)或两者。
IRecognizer<T1,T2>
与 IRecognizer<Any, Any>
不在同一类层次结构中.它们是两种不相关的类型。您可以添加构造函数来转换 IRecognizer<A,B>
到IRecognizer<C,D>
如果这是有道理的,但你不能为指针添加类似的东西。
关于c++ - 在其他模板中使用 Any 类(类似于 boost::any),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36161992/
我是一名优秀的程序员,十分优秀!