确定要在 "if constexpr" 中使用的特定类型
Determining specific type to use inside "if constexpr"
我正在尝试使用“if constexpr( expr )”并在检测到特定类型时执行操作。
我正在修改以下内容:
#include <iostream>
#include <type_traits>
struct aT {};
struct bT {};
struct cT {};
constexpr aT atype;
constexpr bT btype;
constexpr cT ctype;
int main()
{
if constexpr (std::is_same<decltype(atype), aT>::value)
std::cout << "I am type " << typeid(atype).name() << std::endl;
else if constexpr (std::is_same<decltype(btype), bT>::value)
std::cout << "I am type " << typeid(btype).name() << std::endl;
else if constexpr (std::is_same<decltype(ctype), cT>::value)
std::cout << "I am type " << typeid(ctype).name() << std::endl;
}
我没有编译 errors/warnings。但是,在执行时,none 的 if constexpr 测试评估为真。
如果有人能对此有所启发,我将不胜感激。
constexpr
在变量声明的上下文中暗示 const
。试试这个:
if constexpr (std::is_same<decltype(atype), const aT>::value)
std::cout << "I am type " << typeid(atype).name() << std::endl;
我正在尝试使用“if constexpr( expr )”并在检测到特定类型时执行操作。
我正在修改以下内容:
#include <iostream>
#include <type_traits>
struct aT {};
struct bT {};
struct cT {};
constexpr aT atype;
constexpr bT btype;
constexpr cT ctype;
int main()
{
if constexpr (std::is_same<decltype(atype), aT>::value)
std::cout << "I am type " << typeid(atype).name() << std::endl;
else if constexpr (std::is_same<decltype(btype), bT>::value)
std::cout << "I am type " << typeid(btype).name() << std::endl;
else if constexpr (std::is_same<decltype(ctype), cT>::value)
std::cout << "I am type " << typeid(ctype).name() << std::endl;
}
我没有编译 errors/warnings。但是,在执行时,none 的 if constexpr 测试评估为真。
如果有人能对此有所启发,我将不胜感激。
constexpr
在变量声明的上下文中暗示 const
。试试这个:
if constexpr (std::is_same<decltype(atype), const aT>::value)
std::cout << "I am type " << typeid(atype).name() << std::endl;