gpt4 book ai didi

c++ - GCC 4.6 和缺少可变参数模板扩展

转载 作者:行者123 更新时间:2023-11-30 01:26:02 25 4
gpt4 key购买 nike

我正在使用此代码使用可变参数模板创建多个函数包装器:

// Compile with g++ -std=c++0x $(pkg-config sigc++-2.0 --cflags --libs) test.cpp -o test
#include <iostream>
#include <type_traits>
#include <sigc++/sigc++.h>

template <typename R, typename G, typename... Ts>
class FuncWrapper
{
public:
FuncWrapper(G object, std::string const& name, sigc::slot<R, Ts...> function) {};
};

int main()
{
FuncWrapper<void, int, int, bool, char> tst(0, "test", [] (int a, bool b, char c) {});

return EXIT_SUCCESS;
}

此代码可使用 clang++ 正确编译,但由于已知问题不能使用 g++:

test.cpp:9:73: sorry, unimplemented: cannot expand ‘Ts ...’ into a fixed-length argument list

我知道 gcc-4.7 应该正确处理这个问题,但我现在不能升级...所以我想有一个解决方法来使 Ts... 正确解压.我已经在 this one 等问题中测试了此处建议的内容, 但他们似乎并没有解决这里的问题。

最佳答案

您可以通过以下方式解决此错误:

template<template <typename...> class T, typename... Args>
struct Join
{ typedef T<Args...> type; };

然后替换sigc::slot<R, Ts...>typename Join<sigc::slot, R, Ts...>::type

(感谢 Chris Jefferson 在 GCC bug report 上的建议)

关于c++ - GCC 4.6 和缺少可变参数模板扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11297376/

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