Template类需要模板参数
Template class requires template arguments?
很抱歉,我不知道如何为这个问题找到一个好的标题,请随意编辑。
我有一系列类具有相同的角色,这意味着它们都实现了相同的接口(方法集)。考虑一下它们都继承自同一个抽象类(即使在最小的例子中不是这样;这不是这个问题的重点)。这些类都是模板化的。
我想定义一个使用模板参数的类,比如T
和U
,以及以前没有模板参数的一个类A
。在内部,这个新类将使用A<T>
和A<U>
。这可能吗?欢迎使用C++11答案,如有必要,请随时添加标签。
失败的例子如下:
#include <iostream>
// ------------------------------------------------------------------------
struct eng_tag {};
struct fr_tag {};
struct sp_tag {};
// First implementation of the "talk interface"
template <class T = eng_tag> struct A
{
void talk() { std::cout<<"Hellon"; }
};
template <> struct A<fr_tag>
{
void talk() { std::cout<<"Salutn"; }
};
template <> struct A<sp_tag>
{
void talk() { std::cout<<"Olan"; }
};
// Second implementations
template <class T = eng_tag> struct B
{
void talk() { std::cout<<"Byen"; }
};
template <> struct B<fr_tag>
{
void talk() { std::cout<<"A bientotn"; }
};
template <> struct B<sp_tag>
{
void talk() { std::cout<<"Adiosn"; }
};
// etc...
// ------------------------------------------------------------------------
template <class T, class U, class I = A>
struct Wrapper
{
I<T> one() { return I<T>(); }
I<U> two() { return I<U>(); }
};
// ------------------------------------------------------------------------
int main()
{
Wrapper<fr_tag,sp_tag,B> w;
w.one().talk();
w.two().talk();
}
A
是一个模板,而不是一个类型。因此,您需要的是模板模板参数([1],[2]):
template <class T, class U, template<typename> class I = A>
// ^^^^^^^^^^^^^^^^^^^^^^^^^^ template template parameter
struct B
{
I<T> one() { return I<T>(); }
I<U> two() { return I<U>(); }
};
相关文章:
- 传递给std::function template的template参数究竟代表什么
- 模板函数参数到模板函数的"candidate template ignored: could not match ..."
- 为什么std::{container}::template不能推导其参数类型
- 按参数类型更改"return type template"
- SFINAE 优雅地检查"template template class"(在模板参数中)
- 为什么可变参数模板在模板介绍中不起作用,但在要求子句中起作用?ConceptName{T,U,V,W} <-- template<typename ...T>
- std::pair中的template-template参数
- 重新定义类<template-parameter-1-2>的默认参数
- template元编程:将一堆模板参数相乘
- "Unable to resolve template based identifier X" - 从模板类调用模板参数类的方法 (C++)
- 带有Template参数的Template函数
- Template()的参数转发使构造函数参数变为常量
- 使用template-template参数作为类函数的返回类型
- 更改专用化"template<...>"行中模板参数的顺序是否会导致定义重复或歧义?
- 无法从参数中的Template类对象访问成员
- static_assert是否需要使用template参数
- 根据Template参数包装类型的容器的Template类
- 从Template模板参数中定义并推导参数
- 参数处的类型/值与Template不匹配
- 没有参数的模板类"template<>"是什么意思?