是的。獲取variadic模板variadic模板參數variadic參數
比方說,我有一個持有的typedef一個簡單的可變參數的結構:
template<typename... TArgs> struct TupleTypeHolder {
using TupleType = std::tuple<TArgs*...>;
};
我想通過TupleTypeHolder<something>
作爲模板參數到另一個類,並獲得該類型定義。
我所有的嘗試都不編譯。
// None of these is valid
template<template<typename...> class TTupleTypeHolder> struct TupleMaker {
using MyTupleType = TTupleTypeHolder::TupleType; // Not valid
using MyTupleType = typename TTupleTypeHolder::TupleType; // Not valid
};
template<template<typename... A> class TTupleTypeHolder> struct TupleMaker2 {
// A is not a valid name here
using MyTupleType = TTupleTypeHolder<A...>::TupleType; // Not valid
using MyTupleType = typename TTupleTypeHolder<A...>::TupleType; // Not valid
};
有沒有使用可變參數模板參數的方式(在這種情況下,TupleTypeHolder
的TArgs...
)從使用上述類爲模板,可變參數模板參數的類的可變參數模板類的?
用例:
template<typename... TArgs> struct TupleTypeHolder {
using TupleType = std::tuple<TArgs*...>;
};
template<typename... TArgs> static int getSomeValue() { ... }
template<??? T1, ??? T2> class TupleMaker
{
std::pair<int, int> someValues;
using TupleType1 = T1::TupleType;
using TupleType2 = T2::TupleType;
TupleMaker() : someValues{getSomeValue<T1's TArgs...>(),
getSomeValue<T2's TArgs...>()} { }
};
class MyTupleMaker : TupleMaker<TupleTypeHolder<int, char>,
TupleTypeHolder<int, float>>
{ };
MyTupleMaker::TupleType1 tuple1{new int(1), new char('a')};
MyTupleMaker::TupleType2 tuple1{new int(35), new float(12.f)};
1)'TTupleTypeHolder'是一個模板,而不是一個類型。 2)你不能訪問'A'(你傳遞一個模板,沒有參數,所以沒有任何參數可以推斷出來)。 – dyp
在你的代碼中'A'沒有意義。這不是一個參數。這只是一個名字,沒有任何意義。它更像是模板模板參數的*簽名*的一部分。 – Nawaz
請顯示使用示例(「TupleMaker」的預期用法示例)。 – dyp