gpt4 book ai didi

c++ - 在其他模板中使用 Any 类(类似于 boost::any)

转载 作者:行者123 更新时间:2023-11-28 00:05:07 25 4
gpt4 key购买 nike

我已经实现了一个纯 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com