我有一個類來包裝字符串文字並在編譯時計算大小。將傳遞的參數限制爲字符串文字
的構造是這樣的:
template< std::size_t N >
Literal(const char (&literal)[N]);
// used like this
Literal greet("Hello World!");
printf("%s, length: %d", greet.c_str(), greet.size());
有一個與代碼的問題但是。下面的代碼編譯,我想使它成爲一個錯誤。
char broke[] = { 'a', 'b', 'c' };
Literal l(broke);
有沒有辦法限制構造函數,以便它只接受c字符串文字?編譯時間檢測是首選,但如果沒有更好的方法,則運行時間是可以接受的。
@Nawaz提到的問題具體是C字符串文字。我認爲這是適當的提及。 – JaredPar
c標籤可能不合適。我們拭目以待。我希望有人會利用C++ 11的新特性('constexpr',variadics等)來獲得一些技巧。 –
只有在運行時纔會有大小的損失?儘管如此,我會發布答案。 –