考虑具有可变参数模板参数的模板化函数的情况:
template<typename Tret, typename... T> Tret func(const T&... t);
Run Code Online (Sandbox Code Playgroud)
现在,我有一个t价值元组.如何func()使用元组值作为参数调用?我已经阅读了bind()函数对象,call()函数,以及apply()不同的一些现在过时的文档中的函数.GNU GCC 4.4实现似乎call()在bind()类中有一个函数,但是关于这个主题的文档很少.
有些人建议使用手写的递归黑客,但可变参数模板参数的真正价值在于能够在上述情况下使用它们.
有没有人有解决方案,或提示在哪里阅读它?
我想将参数化测试与类型化测试混合在一起。这是我的尝试:
struct X {};
struct Y {};
template <typename T>
struct MyTestFixture: public ::testing::Test
{
T t;
};
template <typename T, typename Param>
struct MyTestFixtureWithParam : public MyTestFixture<T>,
public ::testing::WithParamInterface<Param>
{
};
using MyTestFixtureWithXandString = MyTestFixtureWithParam<X, std::string>;
TEST_P(MyTestFixtureWithXandString, Test1)
{
}
INSTANTIATE_TEST_CASE_P(Name, MyTestFixtureWithXandString,
::testing::Values("a", "b"));
using MyTestFixtureWithYandString = MyTestFixtureWithParam<Y, std::string>;
TEST_P(MyTestFixtureWithYandString, Test1)
{
}
INSTANTIATE_TEST_CASE_P(Name, MyTestFixtureWithYandString,
::testing::Values("a", "b"));
Run Code Online (Sandbox Code Playgroud)
Gtest 是否包含一些混合 TYPED_TEST 和 TEST_P 的宏,或者上面的代码是实现我的目标的唯一方法?
我有一个tupleof pairs,其中每对都有一个固定类型和一个变体类型。我想要的是一个变体类型列表或用这些类型定义一个对象(它肯定是用可变参数模板包构造的)。
根据How do I strip a tuple<>back into a variadic template list of types? ,可以用 的构成类型实例化某些东西tuple。但在这种情况下,我不知道这是否可能,如果可能,我不知道该怎么做。
想象一下我有这样的事情:
struct MyFixedType
{ /* ... */ };
using Tuple = std::tuple<
std::pair<MyFixedType, int>,
std::pair<MyFixedType, double>,
std::pair<MyFixedType, std::string>
>;
Run Code Online (Sandbox Code Playgroud)
我有这门课:
template <typename... Ts>
class MyClass
{
};
Run Code Online (Sandbox Code Playgroud)
我要的是申报对象MyClass与<int, double, std::string>
注意:虽然这种情况可以使用预处理器或一些宏来处理,但我不允许使用宏。