利用模板特化在編譯期將類型映射為整數常量,實現靜態分發,零運行時開銷。
template <typename T>
class TypeChecker; // 主模板故意不定義,觸發編譯錯誤
template <>
class TypeChecker<std::string> {
public:
static const int TYPE = 1;
};
template <>
class TypeChecker<const char*> {
public:
static const int TYPE = 2;
};
template <>
class TypeChecker<char*> {
public:
static const int TYPE = 3;
};
int main() {
std::string dummy = "";
if (TypeChecker<typeof(dummy)>::TYPE == 1)
std::cout << "std::string" << std::endl;
char* data = "";
if (TypeChecker<typeof(data)>::TYPE == 3)
std::cout << "char*" << std::endl;
}
static const int 為編譯期常量,優化器可直接內聯C++17 起可用 if constexpr + std::is_same_v 簡化:
if constexpr (std::is_same_v<T, std::string>) { ... }
else if constexpr (std::is_same_v<T, const char*>) { ... }
但特化模板仍適用於需輸出類型相關常量、構建 traits 體系等場景。
摘自 無心雲