可变参数模板函数重载失败

瑞安麦克弗莱姆斯

我正在尝试StringBuilder为某些单元测试实现某种类型问题是我QByteArray在一些模板中大量使用,这些模板使用了StringBuilder日志记录。为了QByteArray在一个中使用QString().arg()我通常必须用QString(...).

所以我尝试了以下方法:

const char* buildCString(const QString& msg ){
    return msg.toLatin1().toStdString().data();
}

template<typename Head, typename ...Tail>
const char* buildCString(const QString& msg, const Head& arg, const Tail&... rest){
    return buildCString(msg.arg(arg), rest...); //generic use case 
}

template<typename Head, typename ...Tail>
 const char* buildCString(const QString& msg, const QByteArray& arg, const Tail&... rest){
    return buildCString(msg.arg(QString(arg)), rest...); 
}

void main(){
    auto data = buildCString("double %1, QByteArray %2, int %3", 0.123, QByteArray("Test"), 2);
    cout << "Data: " << data << endl;
}

并收到以下错误:

In instantiation of 'const char* buildCString(QString, Head, Tail ...) [with Head = QByteArray; Tail = {int}]':
required from 'const char* buildCString(QString, Head, Tail ...) [with Head = double; Tail = {QByteArray, int}]'
required from here
Fehler: call of overloaded 'arg(QByteArray&)' is ambiguous
     return buildCString(msg.arg(arg), rest...);

所以通用函数被调用而不是更专业的函数。

我的问题是为什么不重载启动?我有一种感觉,我在这里缺少一些基本的东西,但是在搜索了几个小时的解决方案之后,我仍然无法理解它。

我正在使用 Qt 5.9.0 和 mingw32 5.3.0 32Bit。

维托里奥·罗密欧

在这种超负荷...

template<typename Head, typename ...Tail>
 const char* buildCString(const QString& msg, const QByteArray& arg, const Tail&... rest){
    return buildCString(msg.arg(QString(arg)), rest...); 
}

...模板参数Head永远无法推导出来。你应该摆脱它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何重载可变参数模板函数?

来自分类Dev

可变参数函数和可变参数模板重载查找

来自分类Dev

带有可变参数模板参数的重载函数

来自分类Dev

可变参数函数模板的怪异重载解析

来自分类Dev

C ++:可变参数模板和函数重载

来自分类Dev

重载可变参数模板化方法

来自分类Dev

基于模板参数构建带有一组函数重载的可变参数模板类?

来自分类Dev

C ++可变参数模板推导失败

来自分类Dev

可变参数模板函数中对重载函数的歧义调用

来自分类Dev

重载函数模板和继承的参数

来自分类Dev

VS2013中使用可变参数模板时“对重载函数的歧义调用”

来自分类Dev

从可变参数模板类中提取类型以实现成员函数重载

来自分类Dev

在VS2013中使用可变参数模板时“对重载函数的歧义调用”

来自分类Dev

递归可变参数函数模板

来自分类Dev

编写可变参数模板构造函数

来自分类Dev

类型受限的可变参数模板函数

来自分类Dev

可变参数模板函数接受lambda

来自分类Dev

如何传递可变参数模板函数?

来自分类Dev

可变参数模板函数接受lambda

来自分类Dev

可变参数模板中的函数顺序

来自分类Dev

将可变参数模板参数传递给可变函数

来自分类Dev

可变参数模板类-可变参数成员函数

来自分类Dev

可变参数模板对

来自分类Dev

没有模板参数的可变参数模板函数

来自分类Dev

GCC因可变参数模板和指向成员函数的指针而失败

来自分类Dev

将可变参数模板参数用于元组失败的向量

来自分类Dev

可变参数模板参数包推导失败

来自分类Dev

模板参数上的C ++函数模板重载

来自分类Dev

以成员函数指针为参数的可变参数模板

Related 相关文章

热门标签

归档