gpt4 book ai didi

python - boost C++ 方法返回不同的对象类型

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

我想将我的一些 Python 代码移植到 C++ 代码。我现在遇到的问题是当一个函数可能返回不同的对象类型时——比如一个类或另一个类的变量取决于某些条件(但不取决于参数的类型),几乎像这样:

def somefunc(var):
# obj1 is instance of Class1
# obj2 is instance of Class2
#.... some other code
if var == 1:
return obj1
elif var == 2:
return obj2

假设我有用 C++ 实现的相应类。现在我想要的是以某种方式从方法返回一个类或另一个类的实例。我不知道如何处理这个任务——我的 C++ 方法应该是什么样子以及 BOOST_PYTHON_MODULE 应该是什么样子。如果有人可以提供世界上最简单的 C++ 函数返回不同类实例的示例,将不胜感激。

最佳答案

如评论中所述,这里真正的问题是:如何从 C++ 中的同一函数返回不同类型?

我们可以使用boost.variant为了那个原因。这是一个演示我们需要的基本功能的小示例:

#include <iostream>
#include <string>
#include <boost/variant.hpp>

boost::variant<int, std::string> fun (bool i) {
if (i)
return "Hello boost!\n";
return 4711;
}

int main()
{
std::cout << fun(true) << fun(false) << std::endl;
}

输出将是

Hello boost!
4711

关于boost.variant的特性更详细的介绍可以在他们的tutorial中找到.

如果可能的返回类型在编译时未知或者数量很大,我们也可以使用boost.any。 .这更灵活,但有点不那么直接:

#include <iostream>
#include <string>
#include <boost/any.hpp>

using namespace std::literals::string_literals;

boost::any fun (bool i) {
if (i)
return "Hello boost!\n"s;
return 4711;
}

int main()
{
std::cout << boost::any_cast<std::string>(fun(true))
<< boost::any_cast<int>(fun(false)) << std::endl;
}

如果可能,boost.variant 很可能是解决您的问题的更好工具。

关于python - boost C++ 方法返回不同的对象类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31584240/

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