boost::any_cast 到我的自定义类

Posted

技术标签:

【中文标题】boost::any_cast 到我的自定义类【英文标题】:boost::any_cast to my custom class 【发布时间】:2018-06-21 08:33:06 【问题描述】:

我是一些 boost 功能的新手,我在尝试将对 boost::any 的引用转换为对自定义类的引用时遇到了一些问题(现在它是空的,我仍在弄清楚类)。

很快,我有:

class MyClass

public:
    MyClass();
    ~MyClass();
private:


MyClass function(boost::any &source)

    if (source.type() == typeid(MyClass))
        return boost::any_cast<MyClass>(source);

我还没有实现构造函数和析构函数,所以它们仍然是默认的。

编译时(在 Visual Studio 2017 中)我收到以下消息:

严重性代码描述项目文件行抑制状态错误 LNK2001 未解析的外部符号“public: __thiscall MyClass::~MyClass(void)”(??1MyClass@@$$FQAE@XZ) NativeToManagedBridge C:\bridge_library\testCli_sources\NativeToManagedBridge \anyHelper.obj 1

【问题讨论】:

你在某处有构造函数和析构函数的定义吗?如果没有,请尝试将= default 附加到两个声明中。 整个any_cast 业务是一条红鲱鱼,真的。 @StoryTeller 你是什么意思? 【参考方案1】:

你已经声明了你的默认构造函数和析构函数分别用MyClass();~MyClass();。这是什么意思?你在告诉构造函数; “请不要为我实现构造函数或析构函数,我会做的”。如果现在您不定义它们,您将看到您看到的链接器错误,因为编译器不知道在哪里可以找到您的析构函数的定义。您可以通过多种方式解决此问题:

    明确告诉构造函数使用默认定义:MyClass() = default。 不要列出构造函数声明以允许编译器自动定义它。 定义您的构造函数:MyClass()

你可以阅读更多关于definition and declaration here.

【讨论】:

虽然使用构造函数问题很容易解决,但使用析构函数我无法使用第 3 点的方式。是否有特定原因无法做到这一点?我总是在需要的时候编写构造函数和析构函数,这个问题对我来说是新的。 @XectX 析构函数可以通过相同的 3 种方式进行处理。这里对析构函数的定义没有什么不同。

以上是关于boost::any_cast 到我的自定义类的主要内容,如果未能解决你的问题,请参考以下文章

我的自定义 UIView 没有显示在屏幕上

为啥我的自定义 Swift 类没有转移到我的 GameScene [关闭]

setDelegate 到我的自定义视图控制器落下无法识别的选择器

如何将 UIView 插座连接到自定义子视图

Bluemix 应用程序上的自定义域的 SSL 证书传播问题

如何将现有的 JSF 组件添加到我自己的自定义组件中?