问题标签 [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.
recursion - c++0x:可变参数模板技术
我正在为使用可变参数模板定义用户定义的文字做准备
GCC 4.7.0 还不支持operator ""
,但在那之前我可以用一个简单的函数来模拟它。
唉,我的递归是错误的。我想不出一种不移动最右边的值而是最左边的好方法:
这当然不完全正确:
因为我的递归将最右边的'1'移动得最远,而不是最左边的。
这可能是我的小东西,但我就是看不到它。
- 我可以更正这条线
_bin<C>() | _bin<D,ES...>() << 1;
吗? - 还是我必须转发所有内容并在之后将所有内容都转过来(不好)?
- 还是我看不到的其他方式?
更新:我无法反过来折叠递归,但我发现sizeof...
. 有效,但并不完美。还有其他方法吗?
c++ - 将函数模板特化传递给可变参数模板函数
我将函数模板专业化的地址传递给常规模板函数没有问题:
但是,当我尝试将相同的特化传递给可变参数模板时:
我使用 GCC 得到以下编译器错误(我尝试了 4.6.1 和 4.7.0):
为什么我会收到这些错误?
c++ - 可变参数模板容器类中是否可以使用无模板获取器?
据我所知,假设的可变参数模板元组类必须使用带有模板参数的 getter。
这是不方便的,并且引入了错误的可能性。我不禁觉得有一种方法可以构造类,因此您不必显式指定它。
我的第一个想法是让Get()
成员函数返回另一个类,它自己计算出类型,可能是通过与typeid(Foo).name()
一些预先计算的列表中的值进行比较。但是,这仍然必须在运行时之前发生,而且我无法找到一种方法来在编译时迭代类似的东西。
可变参数模板容器类(例如元组)有什么方法可以拥有不需要显式指定类型的 getter?
c++ - 如何修改参数包的每个元素,并从中创建一个元组?
我遇到了可变参数函数模板的问题。我需要检查参数包的每个元素,打包元素,然后将所有打包的元素填充到一个元组中并返回它。这是我想做的一般想法(返回类型只是占位符,不确定它们是什么):
有任何想法吗?
c++ - 可变参数模板和新
我有这个类模板:
这适用于一个模板参数,但对于多个参数我得到这个错误:
如何以new
这种方式使用可变参数模板?什么是正确的语法?
编辑:我认为我的问题不是很清楚。我想要的是这样的:
我的编译器是 clang 163.7.1,带有这个标志:-std=c++0x
.
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不能混用?
c++ - 在 C++11 中实现元函数 zip
我实际上是想看看我是否可以获得一个支持我从 boost::fusion 中使用的极少数操作的最小库。
这是我到目前为止...
由于元功能foreach
实现很简单,我认为zip
也很容易。显然,事实并非如此。
如何将此zip
元函数推广到任意数量的类型列表?我们这里需要的似乎是参数包的参数包。我不知道该怎么做。
编辑1:
实施is_equal
...
zip
我认为也可以采取类似的方法……还没有尝试过zip
,但是当我回到家时会这样做。
编辑2:
这是我最终认为看起来更优雅的东西。这基本上是 Vaughn Cato 方法的一种变体。
这被视为zip
一个fold
操作。
c++ - 关于 std::min() 和 std::max() 的 C++ 可变参数模板版本的思考
我需要对我的 C++11 可变参数版本的实现进行反思std::min
,std::max
. 这是我的两个替代方案std::min
,其中只需替换std::max
为类似地实现:std::min
std::max
关键问题是我们是否需要common_type_min
?请注意,这允许使用一个参数调用 min()。这会导致混乱或问题吗?
c++ - 将可变参数模板粘合到可变参数函数
为了绕过 GCC 在 libc++ 中未实现的始终内联可变参数函数,我想我可以将可变参数函数(如 snprintf,更准确地说是 *_l 变体)包装在可变参数模板中以实现类似的效果。实例化将填充可变参数函数的可变参数,从而使函数可以很好地内联。问题是,我不知道编写可变参数模板的第一件事,当然也不知道如何将模板参数转换为单独的参数。
我要替换的代码是以下形式:
我想用以下形式替换它:
这不起作用,因为扩展后args...
无法转换type
为va_list {aka char*}
. 如果没有办法,我将不得不信任 Howard 并实现一个和两个参数的始终内联模板,这将有效地使所需代码量翻倍。
编辑:也许一种将其转换std::tuple
为args
va_list 的方法可以在这里工作?
c++ - 访问前 n 个可变参数函数参数
我有以下代码:
我想创建构造函数,它接收构造函数参数的通用编号,并将第一个sz
参数数量分配给v
我想做的是能够这样做:Vec<3> var(1.0,2.0,3.0);