Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 指向模板类的函数指针_C++_Templates_Member Function Pointers - Fatal编程技术网

C++ 指向模板类的函数指针

C++ 指向模板类的函数指针,c++,templates,member-function-pointers,C++,Templates,Member Function Pointers,我需要一些关于函数指针和模板之间奇怪混合的帮助 我的目标: 您有一个类:模板类a,和一个实例a B成员。现在我想访问B getter/setter 我试过这个: class B_example { public: B_example(int v):m_var(v){} int getVar() { return m_var; } void setVar(int v) { m_var = v; } private: int m_var; }; template

我需要一些关于函数指针和模板之间奇怪混合的帮助

我的目标:

您有一个类:
模板类a
,和一个实例a B成员。现在我想访问B getter/setter

我试过这个:

class B_example
{
public:
    B_example(int v):m_var(v){}
    int getVar() { return m_var; }
    void setVar(int v) { m_var = v; }

private:
    int m_var;
};


template<typename B> class A
{
public:
    A():m_b(B(5))
    {
        get = &m_b.getVar;
        set = &m_b.setVar;
    }

    int (B::*get)();
    void (B::*set)(int);

private:
    B m_b;
};


int main(int argc, char** argv)
{
    A<B_example> A_instance;
    B_example B_instance(5);


    int a = (A_instance.get*)();

    std::cout << a << std::endl;
}
B类\u示例
{
公众:
B_示例(int v):m_var(v){}
int getVar(){return m_var;}
void setVar(int v){m_var=v;}
私人:
int m_var;
};
模板类别A
{
公众:
A():m_b(b(5))
{
get=&m_b.getVar;
set=&m_b.setVar;
}
int(B::*get)();
无效(B::*集)(int);
私人:
B m_B;
};
int main(int argc,字符**argv)
{
一个例子;
B_实例B_实例(5);
int a=(a_instance.get*)();
std::cout这些:

应该是:

get = &B::getVar;
set = &B::setVar;

(A_instance.get*)()
应该是
(B_instance.*A_instance.get)(

首先,修复语法错误:

get = &B::getVar;
set = &B::setVar;
然后,需要对对象调用成员函数指针。在不知道这些奇怪指针的用途的情况下,我猜不出您想在这里做什么。也许您想调用
B_实例

int a = (B_instance.*A_instance.get)();
或者,您可能想在
A_实例
中的
m_b
对象上调用它,但您不能这样做,因为它是私有的。如果是这样,您可能只需要常规成员函数,而不是奇怪的函数指针

int get() {return m_b.getVar();}
void set(int v) {m_b.setVar(v);}

为什么不使用?因为有时我需要void(int),有时需要int(void),有时需要float(int),有时需要Cv::Size(void)。我不知道函数配置文件…,这是一个
std::function
重写,但您试图做的事情并不十分清楚。如果您只是试图访问字段,请这样做。除此之外,我建议您“因为有时我需要void(int)、有时int(void)、有时float(int)、有时Cv::Size(void)。我不知道函数配置文件…”这需要一些元编程,但它仍然无法解释您实际要做的事情。您能想出一个简洁有用的示例吗?TagDetector实例化IroDetector,n次ITag。但我需要从库外部访问LineFitting或EdgeDetector的每个参数,或者…(源自IroDetector),以及HammingTag、StandardTag或LocalThreshTag…(源自ITag)的每个参数如果<代码> MyB<<代码>是公开的,那么<代码> AySuff.MyB.*AySimult.GET 会工作。让我感到抱歉的是C++分析器编写者:)我的问题是B是一个带有5参数的接口IB的实现,但是我有一个C,其中有7个参数,IB,等等……我想让用户加入这个参数,但是B在A中必须保持私有。所以我想用参数名、get函数、set函数来存储元组,这样用户就可以轻松地遍历元组列表,并获取/设置我允许的参数。
int get() {return m_b.getVar();}
void set(int v) {m_b.setVar(v);}