gpt4 book ai didi

c++ - 使用给定参数调用构造函数的可变参数函数

转载 作者:太空狗 更新时间:2023-10-29 20:33:08 25 4
gpt4 key购买 nike

需要创建可变参数 template<T>具有不同参数类型的函数将调用 T 的构造函数使用给定的参数,有点像创建线程时相反(创建线程时,其构造函数在给定的函数指针处调用函数)。

所以在伪代码中它应该看起来像这样

template<typename T>
T* CreateNew( ARGS ) {
return new T( ARGS ); //Constructor Gets Same Arguments That Were
} //Passed To The Function

希望这表现得像创建线程时那样,当它们使用不同类型的参数调用函数时(我不确定如何实现)。

最佳答案

我不是很清楚,但我想你想查找可变参数模板,例如:

template <typename T, typename... Args>
T* CreateNew(Args... args) {
return new T(args...);
}

添加示例:

#include <iostream>

class A {
public:
A(int a){
std::cout<<__PRETTY_FUNCTION__<<std::endl;
}
A(std::string a){
std::cout<<__PRETTY_FUNCTION__<<std::endl;
}
A(int a,std::string b){
std::cout<<__PRETTY_FUNCTION__<<std::endl;
}
};

template<typename T, typename... Args>
T* create(Args... args){
return new T(args...);
}

int main(){
A b(1);
A c("a");
A d(1,"a");
A* bp = create<A>(1);
A* cp = create<A>("a");
A* dp = create<A>(1,"a");
// This code leaks
return 0;
}

请注意,由于更改尽可能少,我们仍会在此处返回一个 T* 作为原始代码。大多数时候,这不是一个好主意,因为所有权是通过原始指针传递的。因此,正如评论所建议的那样,您可能希望使用 std::unique_ptr,这将使您的 CreateNew 函数基本上等同于 std::make_unique.

关于c++ - 使用给定参数调用构造函数的可变参数函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57001738/

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