相关疑难解决方法(0)

C++静态虚拟成员?

在C++中是否有可能拥有一个staticvirtual?的成员函数?显然,没有一种直接的方法(static virtual member();编译错误),但是至少有一种方法可以达到同样的效果吗?

IE:

struct Object
{
     struct TypeInformation;

     static virtual const TypeInformation &GetTypeInformation() const;
};

struct SomeObject : public Object
{
     static virtual const TypeInformation &GetTypeInformation() const;
};
Run Code Online (Sandbox Code Playgroud)

这是有道理的使用GetTypeInformation()上的一个实例(都object->GetTypeInformation())和一类(SomeObject::GetTypeInformation()),它可以为模板,比较有用和重要.

我能想到的唯一方法包括编写两个函数/一个函数和一个常量,每个类,或使用宏.

还有其他方法吗?

c++ virtual static

133
推荐指数
9
解决办法
9万
查看次数

我们可以有一个虚拟静态方法吗?(C++)

可能重复:
C++静态虚拟成员?

我们可以使用虚拟静态方法(在C++中)吗?我试过编译以下代码:

#include <iostream>
using namespace std;

class A
{
public:
    virtual static void f() {cout << "A's static method" << endl;}
};

class B :public A
{
public:
    static void f() {cout << "B's static method" << endl;}
};

int main()
{
    /* some code */
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是编译器说:

member 'f' cannot be declared both virtual and static
Run Code Online (Sandbox Code Playgroud)

所以我猜答案是否定的,但为什么呢?

谢谢,罗恩

c++ virtual static

41
推荐指数
1
解决办法
5万
查看次数

C++静态成员方法调用类实例

这是一个小测试程序:

#include <iostream>

class Test
{
public:
    static void DoCrash(){ std::cout<< "TEST IT!"<< std::endl; }
};

int main()
{
    Test k;
    k.DoCrash(); // calling a static method like a member method...

    std::system("pause");

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在VS2008 + SP1(vc9)上编译很好:控制台只显示"TEST IT!".

据我所知,不应该在instanced对象上调用静态成员方法.

  1. 我错了吗?从标准角度来看,这段代码是否正确?
  2. 如果它是正确的,那为什么?我找不到为什么会被允许,或者可能是为了帮助在模板中使用"静态或非"方法?

c++ standards visual-c++

38
推荐指数
2
解决办法
6万
查看次数

标签 统计

c++ ×3

static ×2

virtual ×2

standards ×1

visual-c++ ×1