我有一个类模板,它有一个参数包,这个类模板有一个成员函数模板,它也有一个参数包。现在,在成员函数模板中,我需要知道两个模板参数包是否相同(这意味着它们具有相同的长度,并且它们对应的所有元素都相同)。
template<typename... T>
struct C
{
template<typename... U>
void f()
{
//how can I know here if the two template packs are same(meaning of same length as well as have same elements in the same order)
bool result = /*what to write here?*/
std::cout << "T... and U... are: " << (result? "same":"not same")<<"\n";
}
};
int main()
{
C<int, int, int, int> c;
c.f<int,int, int, int>(); // same
c.f<int, int, int>(); //not same
c.f<int, int, int, double>(); //not same
c.f<int, double>(); //not same
}
正如你所看到的,我不知道bool result = ?;
的右边应该是什么。也许可以创造一个特质来做。
2条答案
按热度按时间zlhcx6iw1#
下面显示了使用fold expressions和SFINAE执行此操作的一种方法:
然后你可以写:
Working demo
6rqinv9w2#
一个相对简单的方法是定义一个包含所有类型的类型列表:
然后直接比较2
List
s将为真,如果它们包含相同的类型:这里有一个demo。