甚至不知道這種情況的正確術語是什麼。如果我知道它,那麼我可能會找到答案。如何專門化任何類型的模板以允許可變長度的數組
我有一個模板化的功能,看起來像
template<typename T> void write(Buffer& b, const T& value);
還有就是這個沒有通用的實現,只有明確的專業。例如。
template<> void write<int>(Buffer& b, const int& value) { ... }
template<> void write<const char *>(Buffer& b, const char * const & value) { ... }
到目前爲止好。但是,當然,當我打電話的write(buffer, "hello")
我得到一個鏈接錯誤抱怨
undefined reference to `void write<char [6]>(Buffer&, char const (&) [6])'
這個錯誤對我來說很有意義。但我無法弄清楚的是如何爲此宣佈專業化。我想要這樣一個專門做的就是將char[]
參數投給(const char*)
並調用現有的專業化。但我無法弄清楚如何做到這一點。
對於具體的例子我可以做
template<size_t N> void write<char[6]>(Buffer& b, char const (&value) [6])
,但它顯然不能接受的定義其中之一爲每個可能的長度字符串常量。但我已經嘗試了以下,其中一些只是抓住吸管,而沒有一個能夠工作。
template<size_t N> void write<char const[N]>(Buffer& ob, char const (&value) [N])
template<size_t N> template<> void write<char const[N]>(Buffer& ob, char const (&value) [N])
template<> template<size_t N> void write<char const[N]>(Buffer& ob, char const (&value) [N])
template<template<size_t N>> void write<char const[N]>(Buffer& ob, char const (&value) [N])
什麼是正確的咒語?我正在使用GCC 4.7.3 x86_64。
@SnoopyLane - 這是否回答這個問題? – sfjac
對不起,很晚回覆。很多分心。事實上,這確實解釋了這個問題,而非模板版本就是我最終的結果。非模板是我最初想要的,但是我深深陷入了一些元編程中,並認爲我需要這些模板。我在頂部粘貼的片段已將其簡化。 – SnoopyLane