constexpr開關情況我目前在做這一招有基於一種類型的CString:想得到怎樣的類型
template<class ListT> static char constexpr * GetNameOfList(void)
{
return
std::conditional<
std::is_same<ListT, LicencesList>::value, "licences",
std::conditional<
std::is_same<ListT, BundlesList>::value, "bundles",
std::conditional<
std::is_same<ListT, ProductsList>::value, "products",
std::conditional<
std::is_same<ListT, UsersList>::value, "users",
nullptr
>
>
>
>;
}
但是這個代碼是不是很好看,如果我們要檢查更多類型,這可能是不可讀的。是否有辦法像做一個開關盒一樣做同樣的事情?
事實上,代碼是比這更復雜,因爲的std ::條件需要某種類型的,所以我們需要一些類這樣的伎倆:
struct LicenceName { static char constexpr * value = "licences"; };
例如。
謝謝你,我喜歡你的解決方案。我沒有想過模板專業化;我不習慣玩模板。 – Boiethios
不僅更簡單,而且更好,因爲無效參數以編譯器錯誤而不是nullptr結束,或者至少很容易使其失效 – Justin