gpt4 book ai didi

c++ - 成员指针数组(偏移量)作为 C++ 中的模板参数

转载 作者:太空狗 更新时间:2023-10-29 20:27:54 26 4
gpt4 key购买 nike

最好用一个例子来描述我正在尝试做的事情:

class A
{
int f1();
int f2();
int f3();

typedef int (A::*ptr)();

constexpr static const ptr array[3] =
{
&A::f1,
&A::f2,
&A::f3,
};

template<ptr a[]>
int sum()
{
int s = 0;
for (int i = 0; i < 3; i++)
s += (this->*a[i])();
};

int f4() { return sum<array>(); };
};

它显然不起作用,在 GCC 中给出了以下输出(在模板实例化行,定义似乎没问题):

main.cpp: In member function 'int A::sum()':
main.cpp:49:2: warning: no return statement in function returning non-void [-Wreturn-type]
main.cpp: In member function 'int A::f4()':
main.cpp:51:31: error: no matching function for call to 'A::sum()'
main.cpp:51:31: note: candidate is:
main.cpp:44:6: note: template<int (A::** a)()> int A::sum()
main.cpp:44:6: note: template argument deduction/substitution failed:
main.cpp:51:31: error: could not convert template argument 'A::array' to 'int (A::**)()'

(让我们忽略[对于问题]毫无意义的事实,数组也应该在类之外声明以实际存在)

如何实现?

最佳答案

您忘记了确保常量正确性。更改为:

template<const ptr a[]>
~~~~~

关于c++ - 成员指针数组(偏移量)作为 C++ 中的模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14893847/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com