[英]C++ specialized template function receiving literal string
我正在編寫一個具有許多專業化的模板方法。
class FieldValue
{
public:
...
template< typename T >
void Set( const T& value );
...
};
其中之一是:
template <>
void FieldValue::Set< const char* >( const char* const& value )
{
...
}
但是當我嘗試打電話時
FieldValue fieldValue;
fieldValue.Set( "literal string" );
它期望const char[14]
的專業化,這是"literal string"
的長度,而不是const char*
有沒有解決這個問題而不需要將它轉換為const char*
?
更新
在 Rakete1111 的推薦之后,這就是我所做的:
class FieldValue
{
public:
...
template< typename T >
void Set( const T& value );
template< std::size_t N >
void Set( const char( &value )[ N ] )
{
Set( static_cast< const char* >( value ) );
}
...
};
這將最終調用const char*
專業化
如果你在上課時問這個,我會回答你可以使用部分專業化:
template<std::size_t N>
struct Foo<const char (&)[N]> {};
但這不適用於函數模板。 相反,您可以重載它們:
template<std::size_t N>
void FieldValue::Set(const char (&Value)[N]) {}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.