gpt4 book ai didi

c++ - 可变参数模板模板和完美转发

转载 作者:IT老高 更新时间:2023-10-28 13:59:20 40 4
gpt4 key购买 nike

This questionobject generator pattern让我开始思考如何实现自动化。

基本上,我想自动创建函数,如 std::make_pair , std::bind1ststd::mem_fun这样您就不必为每个模板类类型编写不同的函数,而可以编写一个可以同时处理所有情况的可变参数模板模板函数。这个函数的用法如下:

make<std::pair>(1, 2);         // equivalent to std::make_pair(1, 2)
make<std::binder2nd>(&foo, 3); // equivalent to std::bind2nd(&foo, 3);

这个函数可以写吗make ?我已经尝试过了,但它在 GCC 4.5 或 4.6 中不起作用:

template <template <typename...> class TemplateClass, typename... Args>
TemplateClass<Args...> make(Args&&... args)
{
return TemplateClass<Args...>(std::forward<Args>(args)...);
}

如果我尝试调用(例如)make<std::pair>(1, 2)我只是得到

error: no matching function for call to 'make(int, int)'

我在这里的任何地方都有语法错误吗?
或者这是对的,而 GCC 是错的?
或者这在 C++0x 中根本不可能?

[编辑]

提案N2555似乎暗示这是允许的,GCC claims to have implemented it in GCC4.4 .

最佳答案

完全正确。我希望它能够工作。所以我认为 GCC 拒绝这一点是错误的。 FWIW:

#include <utility>

template <template <typename...> class TemplateClass, typename... Args>
TemplateClass<Args...> make(Args&&... args)
{
return TemplateClass<Args...>(std::forward<Args>(args)...);
}

int main() {
make<std::pair>(1, 2);
}


// [js@HOST2 cpp]$ clang++ -std=c++0x main1.cpp
// [js@HOST2 cpp]$

关于c++ - 可变参数模板模板和完美转发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6486432/

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