【发布时间】:2011-08-11 07:23:11
【问题描述】:
原始问题: 我有一个类型template <typename CostType> struct Key,我在另一个类UQueue 中使用它,它也是CostType 上的模板。我不想在这个类中指定Key<CostType>。我试过typedef Key<CostType> Key,但没用。还有其他解决方法吗?
编辑: 显示问题的最小示例(如果有的话)是这样的:
template <typename T>
class C1 {
T t;
};
template <typename T>
class C2 {
typedef C1<T> C1;
C1 c1;
};
但是,这可行(使用 MSVC 2010)。我的代码中还有其他一些错误,让我误以为 typedef 是非法的。对不起带宽。
【问题讨论】:
-
贴一些代码......两个类的定义,以及typedef。
-
它究竟是如何“不工作”的?你有编译器错误吗?如果是这样,它说明了什么?
-
虽然这个问题可能不是最好的(语言和格式都不是),但我认为可以理解:用户不想在不同的模板中指定模板参数。他试图添加一个
typedef,但失败了(@carlpett:这里你应该添加如何,它不起作用是什么意思?)我相信@Luc Touraille 和@Peter Alexander 理解了这个问题...... -
@Luc - 一个不好的问题应该尽快结束。 :-) 这个可能会重新打开。仍然可以编辑已关闭的问题以获得更多重新投票!
-
好吧,根据@James Kanze 的说法,这样的 typedef 实际上并不是那么好。我冒昧地在这里发表他的评论,因为我删除了他评论的(错误)答案:“这是未定义的行为:§3.2.7/1(第 2 点):“在类 S 中使用的名称 N 应指在其上下文中以及在 S 的完整范围内重新评估时的相同声明。违反此规则不需要诊断。” G++(至少使用我使用的选项,包括 -std=c++98 -pendantic)拒绝编译它。”