繁体   English   中英

在编译时知道模板参数是否为 const char* ?

[英]Know if template parameter is const char* at compile time?

我想在编译时知道模板参数是否为 const char*,例如:

static_assert(!is_pointer_to_const_char("test"));

会断言。

谢谢 !

在您的示例中,硬编码字符串不是“const char *”,而是“const char[N]”数组。 您需要特别处理这种情况:

template<typename T, std::size_t N>
constexpr bool is_pointer_to_const_char(T(&)[N]) 
{ 
    return std::is_same_v<const char, T>;
}

template<typename T>
constexpr bool is_pointer_to_const_char(T &&) 
{ 
    return std::is_same_v<const char *, T>;
}


int main()
{
    string s1 = "str";

    static_assert(!is_pointer_to_const_char(123)); //NOT ASSERTED
    static_assert(!is_pointer_to_const_char("123")); //ASSERTED!
    static_assert(!is_pointer_to_const_char(s1.c_str())); //ASSERTED!
}

std::is_same完全符合您的要求:

std::cout << std::is_same<const char*, const char*>::value;
std::cout << std::is_same<const char*, const char>::value;
std::cout << std::is_same<const char*, char*>::value;
std::cout << std::is_same<const char*, const unsigned char*>::value;
std::cout << std::is_same<const char*, const signed char*>::value;
std::cout << std::is_same<const char*, const volatile char*>::value;

此代码片段的输出是100000

const signed char*const unsigned char*有一个警告:这些类型与const char* 您决定这是否是您所需要的。

关于模板中的用法,这里是一个示例:

template<typename T>
struct C
{
    static int isParametrizedWithConstCharPtr()
    {
        return std:: is_same<const char*, T>::value;
    }
};

std::cout << C<const char*>::isParametrizedWithConstCharPtr(); // 1
std::cout << C<const char>::isParametrizedWithConstCharPtr();  // 0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM