小编jfh*_*jfh的帖子

推导多个参数包

背景

我正在尝试为仅模板单元测试库编写一些模板函数,特别是针对Qt.

问题

在这个库中,我有一个可变参数模板,它接收可变数量的对象和仿函数(实际上是Qt5信号),总是彼此相邻配对,因为QObject, signal, etc...然后希望接着是可变数量的信号参数.

期望的解决方案

// implementation.h

template <typename T, typename U, typename... Sargs, typename... Fargs>
void test_signal_daisy_chain(T* t,  void(T::*t_signal)(Fargs...), 
                             U* u,  void(U::*u_signal)(Fargs...), 
                             Sargs... sargs, 
                             Fargs... fargs) {...}

// client.cpp

test_signal_daisy_chain(object, &Object::signal1, 
                        object, &Object::signal2, 
                        object, &Object::signal3, 
                        1, 2, 3); // where the signals are defined as void(Object::*)(int, int, int)
Run Code Online (Sandbox Code Playgroud)

其中Fargs...对应于无论是在参数t_signalu_signal以及所述参数传递给该功能用于测试,并Sargs...对应于可变的量QObject和信号成员函数(void(T::*)(Fargs...))以发射用于测试的明确目的.

不出所料,由于"模板参数推断/替换失败",我得到"没有匹配的功能",我的ClangCodeModel插件警告我预期有6个参数,其中8个被给出.

工作(丑陋)的解决方案

// implementation.h
template <typename... Fargs>
struct wrapper
{
    template <typename T, typename …
Run Code Online (Sandbox Code Playgroud)

c++ qt templates variadic-functions c++11

8
推荐指数
1
解决办法
349
查看次数

标签 统计

c++ ×1

c++11 ×1

qt ×1

templates ×1

variadic-functions ×1