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