我正在尝试创建一个带有可变数量参数的构造函数,并且我非常希望保持类型安全。我四处搜索并不断找到术语“Faux variadics”(示例:http: //msdn.microsoft.com/en-us/library/hh567368.aspx)但是我无法找到如何使用这些的任何示例虚假可变参数,我想避免直接在源文件中查找 std::tuple。
那么有谁知道这些Faux variadics的一个相对简单的例子?
我正在尝试创建一个带有可变数量参数的构造函数,并且我非常希望保持类型安全。我四处搜索并不断找到术语“Faux variadics”(示例:http: //msdn.microsoft.com/en-us/library/hh567368.aspx)但是我无法找到如何使用这些的任何示例虚假可变参数,我想避免直接在源文件中查找 std::tuple。
那么有谁知道这些Faux variadics的一个相对简单的例子?
您可以使用 boost 预处理器库来执行此操作:
使用 BOOST_PP_REPEAT 的简单示例:
#include <boost/preprocessor/repetition.hpp>
#include <boost/preprocessor/arithmetic/sub.hpp>
#include <boost/preprocessor/punctuation/comma_if.hpp>
#define TINY_print(z, n, data) data
#define TINY_size(z, n, unused) \
template <BOOST_PP_ENUM_PARAMS(n, class T)> \
struct tiny_size< \
BOOST_PP_ENUM_PARAMS(n,T) \
BOOST_PP_COMMA_IF(n) \
BOOST_PP_ENUM( \
BOOST_PP_SUB(TINY_MAX_SIZE,n), TINY_print, none) \
> \
: mpl::int_<n> {};
BOOST_PP_REPEAT(TINY_MAX_SIZE, TINY_size, ~)
#undef TINY_size
#undef TINY_print
现在您还可以使用 November CTP 并尝试他们的可变参数模板实现。