小编ber*_*jan的帖子

在有和没有咨询VM表的情况下通过指针调用虚函数

我想获取c ++类的成员函数的地址,将其存储在指针中,稍后调用虚函数.

我知道有关它的一些事情,但现在不知道如何获取虚拟函数的某个实现的地址,该虚函数不是最后代类(对象的实际类)的实现.

以下是一些示例代码:

    #include <iostream>

    using namespace std;

    class ca
    {
            public:
            virtual void vfunc() {cout << "a::vfunc ";}
            void mfunc() {cout << "a::mfunc ";}
    };

    class cb : public ca
    {
            public:
            virtual void vfunc() {cout << "b::vfunc ";}
    };

    extern "C" int main(int, char **)
    {
            void (ca:: *ptr_to_vfunc)() = &ca::vfunc;

            cout << sizeof(ptr_to_vfunc) << " ";

            cb b;

            (b.*ptr_to_vfunc)();

            ca a;

            (a.*ptr_to_vfunc)();

            void (ca:: *ptr_to_mfunc)() = &ca::mfunc;

            cout << sizeof(ptr_to_mfunc) << " ";
            (a.*ptr_to_mfunc)();
    }
Run Code Online (Sandbox Code Playgroud)

输出是: …

c++ virtual pointers ansi

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

使用std :: ostream方法将格式化文本输出到std :: string对象

我创建了一个函数dump_text(std :: ostream&),它在标准输出流中转储一些文本.文本转到文件或用户控制台.现在,我希望该文本最终出现在标准字符串对象中(请参阅下一个代码示例).

void dump_text(std::ostream &p_ostream)
{
    p_ostream << "text that must endup in string object";
}

class my_class
{
    public:
    my_class(std::string &);
    operator std::ostream & ();
};

int main(int, char **)
{
    std::string l;
    my_class k(l);

    dump_text(k);
}
Run Code Online (Sandbox Code Playgroud)

1)CRT库中是否有'my_class'的标准实现?2)有没有人知道使用std :: ostream - 方法将文本分配给字符串的问题的更好的解决方案?

c++ crt string-formatting

0
推荐指数
1
解决办法
363
查看次数

g ++不会编译我的复杂模板实例化

我使用MinGW最新版本来编译以下代码.我得到了以下信息

     y:/bbom/source/om0/basic/test.cpp: In static member function 'static void somecl
ass::init(class_object*)':
y:/bbom/source/om0/basic/test.cpp:68:50: error: no matching function for call to
 'class_object::add_method(void (&)(object*, arch&))'
y:/bbom/source/om0/basic/test.cpp:68:50: note: candidate is:
y:/bbom/source/om0/basic/test.cpp:27:54: note: template<class p_function> void c
lass_object::add_method(typename p_function::funcion_type)
make.exe: *** [y:/bbom/bin/om0/basic/test.a] Error 1
Run Code Online (Sandbox Code Playgroud)

这是我的代码从这个问题不需要的每件事中脱掉

#include <exception>

class exception : public std::exception
{
    public:
    exception() {}
    exception(const exception &);
    ~exception() throw() {}
    virtual const char *what() const throw();
};

typedef unsigned id, version;
class class_object;

class object
{
    public:
    virtual ~object() {}
    void *get_method(id);
    class_object *get_class_object(); …
Run Code Online (Sandbox Code Playgroud)

c++ templates gnu mingw

-1
推荐指数
1
解决办法
131
查看次数

标签 统计

c++ ×3

ansi ×1

crt ×1

gnu ×1

mingw ×1

pointers ×1

string-formatting ×1

templates ×1

virtual ×1