C++ C++;作为可变模板的参数包

C++ C++;作为可变模板的参数包,c++,tuples,c++14,std,C++,Tuples,C++14,Std,我试图构建一个具有不同类型(string、double、int、bool)的可变数量参数的函数。为此,我使用可变模板。函数参数被传递给std::tuple,稍后将提取其值。但是我的应用程序遇到了编译错误 错误: 错误C2440“初始化”:“char*”无法转换为“int”(翻译为EN)。 对于“int”参数,这显然会被编译器识别为“char*”。注释/删除错误行时,运行时识别的类型正确为“int” IDE: Visual Studio 2017社区版,第15.5.6版 示例: 下面是一个简单的代

我试图构建一个具有不同类型(string、double、int、bool)的可变数量参数的函数。为此,我使用可变模板。函数参数被传递给std::tuple,稍后将提取其值。但是我的应用程序遇到了编译错误

错误: 错误C2440“初始化”:“char*”无法转换为“int”(翻译为EN)。 对于“int”参数,这显然会被编译器识别为“char*”。注释/删除错误行时,运行时识别的类型正确为“int”

IDE: Visual Studio 2017社区版,第15.5.6版

示例: 下面是一个简单的代码示例,它具有适当项目的所有基本特性。注意:此代码示例的编译工作正常,没有错误和变量类型/值,输出符合预期:

#include<iostream>
#include<tuple>

using namespace std;

template<typename ... T>
int func1(string s, T... args) {
    //creating the tuple ...
    auto argsT = make_tuple(args...);

    //run through the variables
    double p0{ get<0>(argsT) };
    string p1{ get<1>(argsT) };
    int p2{ get<2>(argsT) };
    bool p3{ get<3>(argsT) };
    char p4{ get<4>(argsT) };
    int p6{ get<6>(argsT) };

    string w{ s };
    std::cout << w.c_str() << std::endl;

    double z = p0 * p6;

    return 1;
}

int main()
{
    func1("Kuckuck",1.0, "Hello", 4, false, '\n', "bye", -5, true, '\t');
    return 0;
}
#包括
#包括
使用名称空间std;
样板
int func1(字符串s,T…args){
//正在创建元组。。。
auto argsT=生成元组(args…);
//运行变量
双p0{get(argsT)};
字符串p1{get(argsT)};
int p2{get(argsT)};
boolp3{get(argsT)};
字符p4{get(argsT)};
int p6{get(argsT)};
字符串w{s};

std::cout看起来您试图执行以下操作:

int p5{ get<5>(argsT) };
// "const char *" cannot be converted to "int"
intp5{get(argsT)};
//“const char*”无法转换为“int”
这应该起作用:

const char* p5{ get<5>(argsT) };
constchar*p5{get(argsT)};

compilefine(gcc/clang)。如果您使用固定类型转到
get
,您不需要变量模板。顺便说一句,“此代码示例的编译工作正常”那么,为什么要显示它呢?如果您需要帮助解决编译器错误,请显示一个实际显示该错误的示例。换句话说,准备一个。请提供一个包含意外错误的示例让我们猜测
int p5{get(argsT)};
--“bye”->int?