问题标签 [variadic-templates]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
559 浏览

recursion - c++0x:可变参数模板技术

我正在为使用可变参数模板定义用户定义的文字做准备

GCC 4.7.0 还不支持operator "",但在那之前我可以用一个简单的函数来模拟它。

唉,我的递归是错误的。我想不出一种不移动最右边的值而是最左边的好方法:

这当然不完全正确:

因为我的递归将最右边的'1'移动得最远,而不是最左边的。

这可能是我的小东西,但我就是看不到它。

  • 我可以更正这条线_bin<C>() | _bin<D,ES...>() << 1;吗?
  • 还是我必须转发所有内容并在之后将所有内容都转过来(不好)?
  • 还是我看不到的其他方式?

更新:我无法反过来折叠递归,但我发现sizeof.... 有效,但并不完美。还有其他方法吗?

0 投票
1 回答
585 浏览

c++ - 将函数模板特化传递给可变参数模板函数

我将函数模板专业化的地址传递给常规模板函数没有问题:

但是,当我尝试将相同的特化传递给可变参数模板时:

我使用 GCC 得到以下编译器错误(我尝试了 4.6.1 和 4.7.0):

为什么我会收到这些错误?

0 投票
7 回答
730 浏览

c++ - 可变参数模板容器类中是否可以使用无模板获取器?

据我所知,假设的可变参数模板元组类必须使用带有模板参数的 getter。

这是不方便的,并且引入了错误的可能性。我不禁觉得有一种方法可以构造类,因此您不必显式指定它。

我的第一个想法是让Get()成员函数返回另一个类,它自己计算出类型,可能是通过与typeid(Foo).name()一些预先计算的列表中的值进行比较。但是,这仍然必须在运行时之前发生,而且我无法找到一种方法来在编译时迭代类似的东西。

可变参数模板容器类(例如元组)有什么方法可以拥有不需要显式指定类型的 getter?

0 投票
1 回答
1000 浏览

c++ - 如何修改参数包的每个元素,并从中创建一个元组?

我遇到了可变参数函数模板的问题。我需要检查参数包的每个元素,打包元素,然后将所有打包的元素填充到一个元组中并返回它。这是我想做的一般想法(返回类型只是占位符,不确定它们是什么):

有任何想法吗?

0 投票
6 回答
797 浏览

c++ - 可变参数模板和新

我有这个类模板:

这适用于一个模板参数,但对于多个参数我得到这个错误:

如何以new这种方式使用可变参数模板?什么是正确的语法?


编辑:我认为我的问题不是很清楚。我想要的是这样的:


我的编译器是 clang 163.7.1,带有这个标志:-std=c++0x.

0 投票
2 回答
120 浏览

g++ - 我可以在 g++ 中使用可变参数模板(但没有其他 c++0x 功能)吗?

其想法是,由于可变参数模板是编译时特性,因此 ABI 影响或运行时行为变化将很小。这可能吗?

我特别希望 boost::mpl::vector 和 boost::mpl::string 的编译时间更快。

改写问题...

是否可以通过将 c++03 和 c++11 代码分离到库中来混合它们?即,我们使用了很多与 gcc 4.3 兼容的 3rd 方 c++ 库,但我们也在继续使用 gcc 4.7,并打算在可能/有意义的情况下使用 c++11 功能。还是c++11和c++03不能混用?

0 投票
2 回答
1711 浏览

c++ - 在 C++11 中实现元函数 zip

我实际上是想看看我是否可以获得一个支持我从 boost::fusion 中使用的极少数操作的最小库。

这是我到目前为止...

由于元功能foreach实现很简单,我认为zip也很容易。显然,事实并非如此。

如何将此zip元函数推广到任意数量的类型列表?我们这里需要的似乎是参数包的参数包。我不知道该怎么做。

编辑1:

实施is_equal...

zip我认为也可以采取类似的方法……还没有尝试过zip,但是当我回到家时会这样做。

编辑2:

这是我最终认为看起来更优雅的东西。这基本上是 Vaughn Cato 方法的一种变体。

这被视为zip一个fold操作。

0 投票
1 回答
622 浏览

c++ - 关于 std::min() 和 std::max() 的 C++ 可变参数模板版本的思考

我需要对我的 C++11 可变参数版本的实现进行反思std::minstd::max. 这是我的两个替代方案std::min,其中只需替换std::max为类似地实现:std::minstd::max

关键问题是我们是否需要common_type_min?请注意,这允许使用一个参数调用 min()。这会导致混乱或问题吗?

0 投票
3 回答
2738 浏览

c++ - 将可变参数模板粘合到可变参数函数

为了绕过 GCC 在 libc++ 中未实现的始终内联可变参数函数,我想我可以将可变参数函数(如 snprintf,更准确地说是 *_l 变体)包装在可变参数模板中以实现类似的效果。实例化将填充可变参数函数的可变参数,从而使函数可以很好地内联。问题是,我不知道编写可变参数模板的第一件事,当然也不知道如何将模板参数转换为单独的参数。

我要替换的代码是以下形式:

我想用以下形式替换它:

这不起作用,因为扩展后args...无法转换typeva_list {aka char*}. 如果没有办法,我将不得不信任 Howard 并实现一个和两个参数的始终内联模板,这将有效地使所需代码量翻倍。

编辑:也许一种将其转换std::tupleargsva_list 的方法可以在这里工作?

0 投票
9 回答
478 浏览

c++ - 访问前 n 个可变参数函数参数

我有以下代码:

我想创建构造函数,它接收构造函数参数的通用编号,并将第一个sz参数数量分配给v

我想做的是能够这样做:Vec<3> var(1.0,2.0,3.0);