C++ 不从';T';至';常量字符*';使用std::时是否相同<;T、 常量字符*>;::价值

C++ 不从';T';至';常量字符*';使用std::时是否相同<;T、 常量字符*>;::价值,c++,C++,我有一个类,它使用运算符你的,如果语句不是编译时分支,那么编译器将尝试编译 this->previousLineBroken = (a == debug::endl); 对于任何T,即使 std::is_same<T, const char*>::value 在C++11中,可以使用附加的辅助函数和重载: 模板 void setPreviousLineBreak(标准::true_类型,T a) { this->previouslinebreak=(a==debug:

我有一个类,它使用运算符你的
,如果
语句不是编译时分支,那么编译器将尝试编译

this->previousLineBroken = (a == debug::endl); 
对于任何
T
,即使

std::is_same<T, const char*>::value 

在C++11中,可以使用附加的辅助函数和重载:

模板
void setPreviousLineBreak(标准::true_类型,T a)
{
this->previouslinebreak=(a==debug::endl);
}
模板
void setPreviousLineBreaked(std::false_type,T){/*不执行任何操作*/}
您的代码将如下所示:

template <typename T>
inline Logger & Logger::operator<<(const T &a)
{
    if (debug::enabled)
    {
        std::cout << a;
        file << a;
        if (this->previousLineBroken)
        {
            std::cout << std::flush;
            file << std::flush;
            this->previousLineBroken = false;
        }
        setPreviousLineBroken(std::is_same<T, const char*>{});
        return *this;
    }
}
模板

内联记录器&Logger::operator如果
语句不是编译时
分支,则编译器将尝试编译

this->previousLineBroken = (a == debug::endl); 
对于任何
T
,即使

std::is_same<T, const char*>::value 

在C++11中,可以使用附加的辅助函数和重载:

模板
void setPreviousLineBreak(标准::true_类型,T a)
{
this->previouslinebreak=(a==debug::endl);
}
模板
void setPreviousLineBreaked(std::false_type,T){/*不执行任何操作*/}
您的代码将如下所示:

template <typename T>
inline Logger & Logger::operator<<(const T &a)
{
    if (debug::enabled)
    {
        std::cout << a;
        file << a;
        if (this->previousLineBroken)
        {
            std::cout << std::flush;
            file << std::flush;
            this->previousLineBroken = false;
        }
        setPreviousLineBroken(std::is_same<T, const char*>{});
        return *this;
    }
}
模板

内联记录器和记录器::运算符
previouslinebreak
debug::endl
的类型是什么?@static\u cats bool和const char*previouslinebreak
debug::endl
的类型是什么?@static\u cats bool和const char*在C++14中除了为const创建一个专用函数外,无法实现它char*?@adminalmyxtar:如果
,您可以实现自己的
静态\u。在C++14中,除了为const char*?@adminalmyxtar生成一个专用函数外,我没有其他方法来实现它:如果
,您可以实现自己的
static\u。我给
template <typename T>
inline Logger & Logger::operator<<(const T &a)
{
    if (debug::enabled)
    {
        std::cout << a;
        file << a;
        if (this->previousLineBroken)
        {
            std::cout << std::flush;
            file << std::flush;
            this->previousLineBroken = false;
        }
        setPreviousLineBroken(std::is_same<T, const char*>{});
        return *this;
    }
}