gpt4 book ai didi

c++ - 使用中的模板参数包

转载 作者:太空狗 更新时间:2023-10-29 22:54:04 25 4
gpt4 key购买 nike

当参数包是基类的模板参数时,如何在多重继承中使用“using”关键字?

下面的代码编译得很好

struct A
{
void foo(int) {}
};

struct B
{
void foo(int) {}
};

template<typename ...Types>
struct C : public Types...
{
using Types::foo...;
};

int main()
{
C<A,B> c;
}

但是如果我使用模板而不是 AB - 我会遇到编译错误

template<typename T> 
struct TA {};

template<>
struct TA<int>
{
void foo(int) {}
};

template<>
struct TA<double>
{
void foo(int) {}
};

template<typename ...Types>
struct TC : public TA<Types>...
{
using TA<Types>::foo...; // ERROR C3520
};

错误:

error C3520: 'Types': parameter pack must be expanded in this context

如何重写第二段代码使其工作?

附言我用 gcc 试过这段代码,它编译没有错误。但是现在我正在使用 msvc...

最佳答案

因为它是 known MSVC bug ,如果您仍想使用 MSVC 进行此操作,则必须以(不是很)困难的方式进行操作:

template <typename ...Types>
struct TC;

template <typename T>
struct TC<T> : TA<T>
{
using TA<T>::foo;
};

template <typename T, typename ...Types>
struct TC<T, Types...> : public TC<T>, public TC<Types...>
{
using TC<T>::foo;
using TC<Types...>::foo;
};

关于c++ - 使用中的模板参数包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57561347/

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