专门用于常量字符 * 的模板是否也接受字符 *

Will a template specialized for const char * accept char * as well?

本文关键字:字符 是否 用于 常量      更新时间:2023-10-16
专门

用于const char *的模板也会捕获char *吗?

例如:

template <typename T> class Foo { /* ... */ };
template <> class Foo<const char *> { /* ... */ };

Foo<char *>是指通用模板还是专用模板?

模板类和函数仅与完全匹配匹配,因此在您的情况下,Foo<char*>将引用泛型,因为char*const char*是不同的类型。 这对于函数来说变得更加混乱,因为有时引用会添加到类型中:const char*& .

制作一个接受指针变体的类模板有点复杂,但通常或多或少像这样工作:

template <typename T, typename allowed=void> class Foo { /* ... */ };
template <typename T> 
class Foo<T, typename std::enable_if<std::is_same<T, char*>::value || 
                           std::is_same<T, const char*>::value
                           >::type> { /* ... */ };

根据您正在执行的操作,您可能还需要std::remove_reference<T>