C++ 17爲我們提供了非類型模板參數的關鍵字auto
。有沒有辦法將它結合到一個模板模板參數,然後可以使用模板變量作爲參數?模板變量是否可以用作模板參數(類似於類模板)?
template <template <typename> auto X> // <-- This seems to be illegal
struct Foo
{
};
背景:
我想要實現的type_vector類copy_if。因爲我想用所有的條件都可以作爲模板變量,一個方式來實現這將是:
template <typename Container,
template <typename> auto Condition> // If this were allowed
struct copy_if;
template <typename... Ts,
template <typename> auto Condition>
struct copy_if<type_vector<Ts...>, Condition>
{
using type = decltype(
(type_vector<>{} + ... +
std::conditional_t<Condition<Ts>,
type_vector<Ts>,
type_vector<>>{}));
};
當然,我可以總結我的所有變量成具有值模板結構,但我寧願避免這一點。
你定義type_vector? –
@RichardHodges是的,'type_vector'被定義,與'operator +'相同,用於連接兩個'type_vector' – Rumburak
我不太瞭解C++ 17,但在我看來,'template auto'沒有任何意義,因爲汽車只能是一個班級。例如沒有'template int'的概念, –