我想获取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)
输出是: …
我创建了一个函数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 - 方法将文本分配给字符串的问题的更好的解决方案?
我使用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)