【发布时间】:2014-01-15 16:45:01
【问题描述】:
我认为这是完全不可能的,但如果。是否有可能在任何版本的 C++ 中以某种方式在静态成员函数中获取封闭类的类型?
class Impossible {
public:
static void Fun()
{
typedef Impossible EnclosingClass;
// now do something with EnclosingClass ...
}
}
有没有办法在函数中不写类名的情况下获取封闭类的类型(在这种情况下为Impossible)?
我之所以这样做是为了避免在函数中重复类名。如果发生这种情况,很容易导致难以找到复制粘贴错误:
class SomeOther { // another class, with the same interface as Impossible
public:
static void Fun()
{
typedef Impossible EnclosingClass;
// whoops, copy-pasted, forgot to change "Impossible" to "SomeOther"
// now do something with EnclosingClass ...
}
}
有没有防止这种事情发生的好方法?我可以想象触摸在封闭类中声明为私有的东西,但这将迫使我编写额外的代码(因为我当前的设计不包含任何固有的私有成员,所有都是公共的)。
【问题讨论】:
-
+1 告诉我们为什么你想要这个而无需被戳和刺激。
-
@jbgs 我不确定我是否理解这有什么帮助。你的意思是让整个 Fun() 成为一个模板?这将使我每次调用都重复类名两次,而不仅仅是每次声明。请注意,尽管 Run() 在大多数情况下都是相同的(因此容易出现复制粘贴错误),但在某些情况下可能会有所不同,所以我认为将其设为全局静态函数并不是一个好主意(但又一次,可以使用该函数的模板特化)。这就是你的想法吗?
-
@JohnDibling:令我惊讶的是,这里没有长期合作者开始“但它真的那么重要吗?” cmets 系列。提出类似的问题就像穿过一堵砖墙,你不仅要解释为什么要这样做,还必须在人们帮助你之前说服他们为什么他们想要这样做.否则他们只会花几个小时告诉你为什么你错了,你在寻找什么是完全不必要的,更不用说你告诉他们为什么你会想要它。为一个好问题 +1。
-
我想知道你为什么要复制粘贴,但也许我的水平太高了。
-
@rubenvb 这是一个出现在图框架中的问题,其中大多数边/顶点类非常相似,有细微的差别。实现本身非常小,只有几行代码,因此在使用通用实现方面没有太多工作要做,无论是基类还是实用程序函数。所以不幸的是,东西被复制/粘贴了。另见stackoverflow.com/questions/21143835/…
标签: c++ types static-methods