我有一个2D数组的函数指针,它们在类的所有实例(数百万!)中具有相同的值。
class Foo{
public:
...
...
static int bar1(const Foo& foo_1, const Foo& foo_2);
static int bar2(const Foo& foo_1, const Foo& foo_2);
static int bar3(const Foo& foo_1, const Foo& foo_2);
static int bar4(const Foo& foo_1, const Foo& foo_2);
static int bar4(const Foo& foo_1, const Foo& foo_2);
friend bool foobar_func(const Foo& foo_1, const Foo& foo_2) {
...
我的2D数组类似于:
int (*fcn_pointers[2][2])( const Foo&, const Foo&) = {
{&Foo::bar1, &Foo::bar2},
{&Foo::bar3, &Foo::bar4}
}
对于我的生活,我无法将此2D数组初始化一次,然后在foobar_func
内使用。我遇到了问题,因为类型依赖于它所属的类。
这甚至可能吗?性能非常在这里非常重要 - 我这样做的重点是提高性能(如果它有效的话)。所以添加一个条件来检查它是否被初始化是我无法承受的。
我不熟悉C ++ - 我对C ++的整个体验都是基于查看这个源代码的周末,所以我可能遗漏了一些明显的东西。我对C ++的使用并不需要比这样的问题更深入,所以学习C ++并不是一个优先事项(尽管可能有一些关于它的'陷阱'的链接会有所帮助。我是一名熟悉Java,C和Python的博士生,所以我理解面向对象的编程,而不是如何用C ++解决这个问题。
我试图做这样的事情,但它说链接器找不到Foo::bar1
等。
class Foo{
public:
static int bar1(const Foo& foo_1, const Foo& foo_2);
static int bar2(const Foo& foo_1, const Foo& foo_2);
friend bool foobar_func(const Foo& foo_1, const Foo& foo_2) {
return false;
}
};
int (*fcn_pointers[2][2])( const Foo&, const Foo&) = {
{&Foo::bar1, &Foo::bar2},
{&Foo::bar1, &Foo::bar2}
};
admin@test:~/test$ g++ -std=c++11 test.cpp
/tmp/ccN4yJ56.o:(.data+0x0): undefined reference to `Foo::bar1(Foo const&, Foo const&)'
/tmp/ccN4yJ56.o:(.data+0x8): undefined reference to `Foo::bar2(Foo const&, Foo const&)'
答案 0 :(得分:1)
以下是解决问题的一种方法:
class Foo
{
public:
static int bar1(const Foo& foo_1, const Foo& foo_2);
static int bar2(const Foo& foo_1, const Foo& foo_2);
static int bar3(const Foo& foo_1, const Foo& foo_2);
static int bar4(const Foo& foo_1, const Foo& foo_2);
typedef int(*fcn_pointers_type)(const Foo&, const Foo&);
static const fcn_pointers_type funcs[2][2];
};
// put in a source file
const Foo::fcn_pointers_type funcs[2][2] = { { &Foo::bar1, &Foo::bar2 }, { &Foo::bar3, &Foo::bar4 } };