【发布时间】:2014-04-24 12:30:09
【问题描述】:
假设我有一个类 Foo,它使用两种不同的泛型类型,一种是_Type,另一种是_Comparator。 _Type 已知是 std::vector、std::list 或 std::string,因此它内部会有一个类型:T 将在 vector 和 list 之内; char 将在 string 内。
我的另一个泛型类型_Comparator 是一个可选模板参数,用户可以通过它指定她自己的小于函数、仿函数或lambda 函数。如果没有提供参数作为第二个模板参数,它应该默认为std::less<M> 函子,其中M 类型应该是_Type 中包含的元素的类型。
我不知道如何执行此操作的语法。
我试过了:
template <typename _Type<T>, typename _Comparator = less<T> >
无济于事。
【问题讨论】:
-
请注意,你的名字是无效的:下划线后跟大写字母的名字是为实现保留的,你不能在代码中自己使用。
-
所有容器类型内部都有一个
value_typetypedef。因此,如果您确定Type将始终是一个容器,您可以使用Type::value_type来访问包含的类型。是的,std::string是一个容器,一个非常专业的容器。 -
@KonradRudolph 我有点困惑:为哪个实现保留?另外,模板参数的名称是在家庭作业中给出的,所以我认为它们应该是有效的,否则我在这里误解了你。
-
编译器实现。如果你的老师给了你这些名字,你应该告诉老师停下来。
-
注明。我会向他提出这一点。