Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.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++_Visual Studio_Templates_Boost_Compiler Warnings - Fatal编程技术网

C++ 删除C+中的性能警告+;模板类

C++ 删除C+中的性能警告+;模板类,c++,visual-studio,templates,boost,compiler-warnings,C++,Visual Studio,Templates,Boost,Compiler Warnings,我想删除模板类函数中的float-to-bool转换性能警告,如果在这种情况下感觉像是过度杀戮,那么我想删除boost::enable_ 是否有一种方法可以在编译时检查模板的类型,然后根据类型使用适当的强制转换 T val; float val2; val = (T)(val+val2); // warning here for objects of type bool 我想要这样的东西: #if (boost::is_same<CType, bool&


我想删除模板类函数中的float-to-bool转换性能警告,如果在这种情况下感觉像是过度杀戮,那么我想删除
boost::enable_

是否有一种方法可以在编译时检查模板的类型,然后根据类型使用适当的强制转换

    T val;
    float val2;
    val = (T)(val+val2); // warning here for objects of type bool

我想要这样的东西:

    #if (boost::is_same<CType, bool>::value == true)
        val = (val+val2)!=0;
    #else
        val = (T)(val+val2);
    #endif
#if(boost::is_same::value==true)
val=(val+val2)=0;
#否则
val=(T)(val+val2);
#恩迪夫

我不希望只是禁用警告


编辑:添加了visual studio标记

您可以将操作拉出到单独的模板中,并为
bool
重载:

template <typename T1, typename T2>
T1 add(T1 const & v1, T2 const & v2) {
    return static_cast<T1>(v1 + v2);
}

template <typename T2>
bool add(bool v1, T2 const & v2) {
    return (v1 + v2) != 0;
}

T val;
float val2;
val = add(val,val2); // hopefully no warning now.
模板
T1添加(T1常量和v1,T2常量和v2){
返回静态_-cast(v1+v2);
}
样板
bool add(bool v1、T2 const和v2){
返回(v1+v2)!=0;
}
T值;
浮动val2;
val=add(val,val2);//希望现在没有任何警告。

只需使用
与if块相同
来“专门化”bool。它是标准库的一部分,以防您不想使用Boost

template<typename T>
void foo(T val1) {
    T val;
    float val2;

    if (std::is_same<T, bool>::value == true)
        val = (val1 + val2) != 0;
    else
        val = val1 + val2;
}
模板
无效foo(T val1){
T值;
浮动val2;
if(std::is_same::value==true)
val=(val1+val2)!=0;
其他的
val=val1+val2;
}

因为它是一个模板函数,所以我希望编译器优化分支,获得与真正的模板专门化相同的结果。

欢迎使用堆栈溢出!Compler警告特定于您使用的编译器。请将此问题适当地标记到您的编译器。您可以专门化bool类型的模板。谢谢Colin,但是创建专门化来修复一个警告对我来说似乎有点过分了。肯定有更方便的方法吗?
val=(val+val2)=0;
不会按您期望的方式工作。只是出于好奇,为什么您不能用您想要的代码做您正在做的事情?您可以使用
创建完全相同的代码块。