Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ _相同且可变模板编译时错误无效转换_C++_C++11 - Fatal编程技术网

C++ _相同且可变模板编译时错误无效转换

C++ _相同且可变模板编译时错误无效转换,c++,c++11,C++,C++11,所以我在做一个项目,我向我的类传递了不同类型的变量来初始化元组。现在,在我的代码中的某个地方,我想检查元组元素之一,比如索引0处的元素,是否为int类型。如果是int类型,我将更改其值。我通过使用is_same和decltype来检查类型是否相同,如果它们相同,我将执行修改,正如我在下面的主要部分中所做的那样。但是,当我试图编译该代码时,编译器会给出一个错误,表示转换无效。但是,既然类型不同,那么如果分支永远无法到达,这难道不应该吗?或者是否有其他方法来检查类型并执行我想要的修改?谢谢 temp

所以我在做一个项目,我向我的类传递了不同类型的变量来初始化元组。现在,在我的代码中的某个地方,我想检查元组元素之一,比如索引0处的元素,是否为int类型。如果是int类型,我将更改其值。我通过使用is_same和decltype来检查类型是否相同,如果它们相同,我将执行修改,正如我在下面的主要部分中所做的那样。但是,当我试图编译该代码时,编译器会给出一个错误,表示转换无效。但是,既然类型不同,那么如果分支永远无法到达,这难道不应该吗?或者是否有其他方法来检查类型并执行我想要的修改?谢谢

template <typename ...args>
class A
{
public:
   A(args&&...params)
   {
      m_tuple = new std::tuple<args...>(params...);
   }
   std::tuple<args...>* m_tuple;
};


int main()
{
  if (std::is_same<int,std::string>::value)
  {
      int i = "12";
  }
}

模板
甲级
{
公众:
A(参数和参数)
{
m_tuple=新的std::tuple(params…);
}
std::tuple*m_tuple;
};
int main()
{
if(std::is_same::value)
{
int i=“12”;
}
}

要检查元组中的特定索引是否具有特定类型,可以执行以下操作:

#包括
#包括
#包括
使用名称空间std;
模板
甲级{
公众:
A(参数和参数){
m_tuple=新的std::tuple(params…);
}
std::tuple*m_tuple;
模板
constexpr bool持有类型(){
使用type=typename std::tuple\u元素<
(索引>大小…(参数)?0:索引),
std::tuple
>::类型;
返回sizeof…(args)>索引和标准::可转换::值;
}
};
int main(){
A(“str”,10);
A b(10,“str”);
如果(a.保持_type()){

STD::CUT无关的注释:const char和STD::STIN是不一样的。即使这个块代码在运行时永远不会达到,编译器也必须编译它。也许你应该考虑使用<代码>如果CONTXPRPR 选择性地编译你的代码的一些分支。如果在编译时某个条件是真的,那么编译,其他的C++不是一种解释语言,所以编译时,编译器必须验证代码并为其创建汇编代码,这样编译器就不知道分支是否会到达!