使用模板模板参数从可变参数模板合并类型
Merging types from variadic template using template-template arguments
我正在尝试扩展通过模板模板传递的参数列表。第一个示例有效,第二个示例无效。我正在寻找的结果是,在第二个示例中,cWapperObject.cMemberVariable.cTuple
的类型为 std::tuple<double, float, short, int>
。我怎样才能做到这一点? (请不要在评论或答案中提及图书馆提升)。
示例 1:
#include <tuple>
template<class ... TS> class CObject {
std::tuple<TS ...> cTuple;
};
template<template<typename ... TS> class TMPL_CLASS_T>
class CWrapperObject {
TMPL_CLASS_T<double, float, short> cMemberVariable;
};
int main() {
CWrapperObject<CObject> cWapperObject;
return 0;
}
示例 2:
#include <tuple>
template<class ... TS> class CObject {
std::tuple<TS ...> cTuple;
};
template<template<typename ... TS> class TMPL_CLASS_T>
class CWrapperObject {
TMPL_CLASS_T<double, float, TS ...> cMemberVariable;
};
int main() {
CWrapperObject<CObject<short, int>> cWapperObject;
return 0;
}
CObject
是一个 class 模板,它可以用作模板-模板参数。 CObject<short, int>
是一种类型,它不能用作模板模板参数,模板模板参数本身也不携带任何实际类型模板参数。您仍然可以使用部分特化,利用模板模板参数以及用于实例化模板的实际类型模板参数来推断 class 模板名称及其参数:
template <typename... TS>
struct CObject
{
std::tuple<TS...> cTuple;
};
template <typename>
struct CWrapperObject;
template <template <typename...> class TMPL_CLASS_T, typename... TS>
struct CWrapperObject<TMPL_CLASS_T<TS...>>
{
TMPL_CLASS_T<double, float, TS...> cMemberVariable;
};
我正在尝试扩展通过模板模板传递的参数列表。第一个示例有效,第二个示例无效。我正在寻找的结果是,在第二个示例中,cWapperObject.cMemberVariable.cTuple
的类型为 std::tuple<double, float, short, int>
。我怎样才能做到这一点? (请不要在评论或答案中提及图书馆提升)。
示例 1:
#include <tuple>
template<class ... TS> class CObject {
std::tuple<TS ...> cTuple;
};
template<template<typename ... TS> class TMPL_CLASS_T>
class CWrapperObject {
TMPL_CLASS_T<double, float, short> cMemberVariable;
};
int main() {
CWrapperObject<CObject> cWapperObject;
return 0;
}
示例 2:
#include <tuple>
template<class ... TS> class CObject {
std::tuple<TS ...> cTuple;
};
template<template<typename ... TS> class TMPL_CLASS_T>
class CWrapperObject {
TMPL_CLASS_T<double, float, TS ...> cMemberVariable;
};
int main() {
CWrapperObject<CObject<short, int>> cWapperObject;
return 0;
}
CObject
是一个 class 模板,它可以用作模板-模板参数。 CObject<short, int>
是一种类型,它不能用作模板模板参数,模板模板参数本身也不携带任何实际类型模板参数。您仍然可以使用部分特化,利用模板模板参数以及用于实例化模板的实际类型模板参数来推断 class 模板名称及其参数:
template <typename... TS>
struct CObject
{
std::tuple<TS...> cTuple;
};
template <typename>
struct CWrapperObject;
template <template <typename...> class TMPL_CLASS_T, typename... TS>
struct CWrapperObject<TMPL_CLASS_T<TS...>>
{
TMPL_CLASS_T<double, float, TS...> cMemberVariable;
};