推导出参数“T”的冲突类型(<const int &> vs. <int>)

问题描述 投票:0回答:1

我有一个带有参数包的类

Base
MyFunc
模板。

我有一个类

Derived
,它在参数包中指定一个
const T&
类型。

template <typename... T>
class Base {};

template <typename... T>
void MyFunc(Base<T...>, T... t) {}

class Derived : public Base<const int&> {};

void Test() { MyFunc(Derived(), 1); }

这会产生错误:

no matching function for call to 'MyFunc'
deduced conflicting types for parameter 'T' (<const int &> vs. <int>)

我怎样才能完成这项工作,以便我可以在参数包中使用

const T&

c++ variadic-templates type-traits conditional-compilation parameter-pack
1个回答
0
投票

使一种类型不可扣除

template <typename... Ts>
void MyFunc(Base<Ts...>, std::type_identity_t<Ts>... ts) {}

或者,如果合适的话,可以制作 2 个参数包:

template <typename... Ts, typename... Us>
void MyFunc(Base<Ts...>, Us&&... us) {}
© www.soinside.com 2019 - 2024. All rights reserved.