gpt4 book ai didi

templates - 部分专门化类模板以将 boost::tuple 作为参数之一时出错

转载 作者:行者123 更新时间:2023-12-02 22:54:33 27 4
gpt4 key购买 nike

我在使用 boost::tuple 部分专门化模板时遇到了错误。将 boost::tuple 替换为 std::tuple 时编译的相同代码。这是压缩为无法编译部分的代码。

template <typename... Args>
class Test;

template <typename... Args>
class Test<std::tuple<Args...>, Args...>
{
};

template <typename... Args>
class Test<boost::tuple<Args...>, Args...>
{
};

int main()
{
int rc;

cout<<abi::__cxa_demangle(typeid(Test<boost::tuple<int, int>, int,int>).name(), 0, 0, &rc)<<endl;//Doesn't compile
cout<<abi::__cxa_demangle(typeid(Test<std::tuple<int, int>, int,int>).name(), 0, 0, &rc)<<endl;//Compiles
return 0;
}

g++48 的编译错误是

tuplerr.cpp: In function ‘int main()’:
tuplerr.cpp:30:73: error: invalid use of incomplete type ‘class Test<boost::tuples::tuple<int, int, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type>, int, int>’
cout<<abi::__cxa_demangle(typeid(Test<boost::tuple<int, int>, int,int>).name(), 0, 0, &rc)<<endl;//Doesn't compile
^
tuplerr.cpp:14:7: error: declaration of ‘class Test<boost::tuples::tuple<int, int, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type>, int, int>’
class Test;

但是,使用 std::tuple 的特化效果很好。我做错了什么?

最佳答案

试试这个

// used below to create a "non-deduced context"
template<typename T>
struct Id { typedef T type; };

template <typename... Args>
class Test;

template <typename... Args>
class Test<typename Id<std::tuple<Args...>>::type, Args...>
{
};

template <typename... Args>
class Test<typename Id<boost::tuple<Args...>>::type, Args...>
{
};

这样 boost::tuple 中的可选参数(具有默认参数,因为您的 boost 的元组实现使用它来模拟可变参数模板)不会使第一个 Args... 与后面的 Args... 扩展相矛盾,后者仅具有所需的显式传递参数。

关于templates - 部分专门化类模板以将 boost::tuple 作为参数之一时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22080614/

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