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;
}
}