回答
静态函数不能是虚拟的,因为它们没有通过它们访问的实例。我相信你可以覆盖他们。
我知道我不能同时使用静态和虚拟,但我必须做那样的事情, – fank 2011-06-09 10:19:32
没有办法做到这一点。或者使用函数指针技巧(我强烈建议)或者移除静态约束。如果使用静态方法创建工厂,请在工厂模式中完成(http://programmerjoe.com/2007/03/18/the-abstract-factory-pattern-in-c/) – 2011-06-09 10:22:37
您不能拥有静态虚拟函数,因为将它们设置为没有意义。
实际上,它可以是有意义的:它就像任何其他虚拟函数一样,实现根据类的派生类型进行更改。只是你没有一个实例。 [德尔福](http://docwiki.embarcadero.com/RADStudio/en/Methods#Ordinary_Class_Methods),例如,允许它并且它们可以是相当有用的。 – 2011-06-10 02:23:46
虚拟函数通常依赖于this
指针来确定要在运行时调用的函数的类型。
静态成员函数不通过this
,因此C++中不允许使用静态虚函数。
如果我理解乌尔题正确,则U可以按照下面的方法,否则忽略..
在基类的静态函数指针。
在基类具有静态函数(式中,u通过使用静态函数指针调用函数)..
在派生类设置静态函数poiter到功能认定中û希望执行..(在基类中,你可以将函数指针设置为某个默认函数)。
你的意思是,你需要一个指向静态函数(例如,以作为参数传递给需要一个指向静态功能的另一功能),但你需要虚拟访问函数指针?在这种情况下,使用一个虚拟函数来获取函数指针:
typedef void (*function)();
void do_stuff_with_function(function);
struct Base {
virtual ~Base() {}
virtual function get_function() = 0;
};
struct Derived : Base {
function get_function() {return my_function;}
static void my_function();
};
Derived d;
do_stuff_with_function(d.get_function());
ATL的框架通过使基类是一个模板,然后具有得到周围没有虚拟静力学的限制派生类通过它们的类型作为模板参数。然后基类可以调用派生类静力学需要的时候,例如:
template< class DerivedType >
class Base
{
public:
static void DoSomething() { DerivedType::DoSomethingElse(); }
};
class Derived1 : public Base<Derived1>
{
public:
static void DoSomethingElse() { ... }
};
class Derived2 : public Base<Derived2>
{
public:
static void DoSomethingElse() { ... }
};
这被称为Curiously recurring template pattern,其可以被用于实现静态多态性。
这个设计正是我所需要的,但有一个问题。当你声明'class Derived1'时,你如何使用'Base
尝试将'typename'更改为'class'。并阅读:[奇怪的循环模板模式](http://en.wikipedia.org/wiki/Curiously_recurring_template_pattern)。 – 2014-02-02 16:43:05
不错的一个!我不知道那个设计。现在正在工作,非常感谢。我已经+1了你的答案。 – 2014-02-02 17:16:21
- 1. 静态函数调用非静态函数在C++
- 2. C++多态/纯虚函数
- 3. 带静态类的虚函数?
- 4. “......”一个C静态函数
- 5. c中的静态函数
- 6. C++静态函数和
- 7. C#从静态函数
- 8. C++静态函数复制
- 9. 静态函数静态函数
- 10. extern在C++中的静态函数
- 11. 在C++静态库中导出函数
- 12. 函数在C++中的静态绑定
- 13. 在C++中调用静态函数
- 14. 在Python中访问静态C函数
- 15. 静态线程函数访问非静态类成员在C++
- 16. 在C++中更新静态函数中的非静态成员
- 17. 在C++中使用静态和静态函数的错误
- 18. 静态函数
- 19. 通过函数指针静态调用虚函数
- 20. 静态成员函数调用的语义虚函数时
- 21. C链接C++静态函数
- 22. 虚函数(C++)
- 23. 虚函数C++
- 24. 静态函数
- 25. C++函数返回静态数组
- 26. 如何从另一个静态函数调用静态函数
- 27. 静态函数中的静态变量?
- 28. C#替代虚拟静态方法和静态子类
- 29. Objective C静态构造函数与动态构造函数
- 30. C#虚拟(或抽象)静态方法
给出一个具体的,最小的和完整的例子,说明你正在努力实现的目标(不是你想要实现的目标),我们可以考虑如何做到这一点。 – 2011-06-09 10:23:24