检查参数包是否包含类型

问题描述 投票:7回答:3

我想知道C ++ 0x是否提供任何内置功能来检查可变参数模板的参数包是否包含特定类型。今天,如果您使用boost :: mpl :: vector来代替可变参数模板,可以使用boost ::: mpl :: contains完成此操作。但是,它具有严重的编译时间开销。我想,C ++ 0x对std :: is_same具有编译器级别的支持。因此,我在考虑是否也支持编译器如下所示的概括。 template <typename... Args, typename What> struct is_present { enum { value = (What in Args...)? 1 : 0 }; };

我想知道C ++ 0x是否提供任何内置功能来检查可变参数模板的参数包是否包含特定类型。今天,如果...
c++ c++11 templates metaprogramming variadic
3个回答
4
投票
不,您必须将(部分)专业化与可变参数模板一起使用,这样才能进行编译时计算:

2
投票
如果您想避免手动类型的递归,在我看来std::common_type是STL中唯一的可变参数模板实用程序,因此它是唯一可能封装递归的模板。

2
投票
幸运的是,C ++标准已经发展。使用C ++ 1z或C ++ 17,您最终可以轻松地遍历参数包。因此,答案的代码(几乎)很简单,如问题所示:
© www.soinside.com 2019 - 2024. All rights reserved.