我一直在试验 C++ 中的函数类型。请注意,我并不是指指向函数的类型,例如:
typedef void (*voidFuncPtr)();
但更具异国情调:
typedef void (voidFunc)();
我没想到下面的代码会编译,但令人惊讶的是:
template<voidFunc func>
class funcClass
{
public:
void call() { func(); };
};
void func()
{ }
void Test()
{
funcClass<func> foobar;
foobar.call();
}
但是,如果我尝试将以下内容添加到 funcClass:
voidFuncPtr get() { return &func; }
我得到错误Address expression must be an lvalue or a function designator
我在这里的第一个问题是:编译器使用什么样的黑魔法来假装一个 func 类型是它实际上可以传递一个实例的东西?它只是将其视为参考吗?第二个问题是:如果它甚至可以调用,为什么它的地址不能被取走?另外,这些非指针函数类型叫什么?我只是因为 boost::function 而发现了它们,并且从来没有找到任何关于它们的文档。