gpt4 book ai didi

c++ - 如何将任意数量的参数传递给 C++ 模板函数?

转载 作者:行者123 更新时间:2023-12-05 08:49:03 27 4
gpt4 key购买 nike

我有这个简单的 C++ 模板函数。我需要将任意数量的任意类型的参数传递给方法,如下所示。我该怎么做?

template <typename T1, typename T2, auto Method>
T1 * wrapObject()
{
T2 * obj = (*_asposeObj.*Method)(// I would like to pass arguments here);
...
}

这是一个C++20项目,编译器是g++。

我试过:

template <typename T1, typename T2, auto Method, auto ...Args>
T1 * wrapObject(Args... args)
{
T2 * obj = (*_asposeObj.*Method)(&args);
...
}

但这不会编译。有什么想法吗?

编辑:

感谢所有帮助,现在可以使用了!

但是,还有一个相关的问题:如果asposeObj中有两个版本的Method怎么办?喜欢:

asposeObj->idx_get(int index);
asposeObj->idx_get(someObj);

编译器似乎无法确定我们要调用哪个,我收到“无法从...推断‘自动’”错误。

如何修改以下调用以使其工作? wrapObject 就是我上面提到的模板函数。

wrapObject<SomeClass, AnotherClass, &ClassAsposeOj::idx_get>(index)

最佳答案

您可能没有使用 parameter pack以正确的方式。

正确用法:

template <typename T1, typename T2, auto Method, class ...Args>
T1 * wrapObject(Args &&... args)
{
T2 * obj = (*_asposeObj.*Method)(args...);
...
}

完美转发:

template <typename T1, typename T2, auto Method, class ...Args>
T1 * wrapObject(Args &&... args)
{
T2 * obj = (*_asposeObj.*Method)(std::forward<Args>(args)...);
...
}

了解更多:What are the main purposes of using std::forward and which problems it solves?

关于c++ - 如何将任意数量的参数传递给 C++ 模板函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65144882/

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