使用此功能的CV合并参数制作功能模板
Making a function template with cv-qualified arguments of this function
我有一个函数模板:
template < typename A, typename B, typename xClass, typename D>
void foo(A& a, B& (xClass::*fooPtr)(D& d));
{
//some code
}
我有一些类,我想以后用作功能中的XCLASS。但是他们的成员功能具有不同的const-qualifier:
const out_t& Class1::foo1(in_t) const // (1)
out_t& Class1::foo1(in_t) // (2) just non-const version of foo1(), making the same actions
out_t& Class2::foo2(in_t) const // (3)
现在,如果我使用
... B& (xClass::*fooPtr)(D& d) ...
在函数模板中,仅指向(2)成员函数的指针使foo()起作用,而其他指针会导致"不兼容的CV-Qualifiers"错误。HOWER,添加" const"预选赛:
... B& (xClass::*fooPtr)(D& d) const ...
使(3)工作,但是现在(2)((1))也会导致错误。
有没有一种简单的方法使函数foo()以"不注意"指示器的"不注意" cv Qualifiers to成员函数?我试图使用reinterpret_cast,以使所有必要的指针用于成员函数类似的CV合格:
typedef B& out_t& (Class1::*fooPtr)(in_t) const;
fooPtr myPtr = reinterpret_cast<fooPtr>(&Class1::foo1);
但失败了。
一种方法是使您的 foo
功能更一般,因此它仅采用任何类型的成员指针:
template < typename A, typename F, typename xClass>
void foo(A& a, F xClass::*fooPtr)
{
//some code
}
这意味着foo
将接受除您想要的签名以外的数据成员或成员功能的指示,但通常并不是一个大问题。如果您通过错误的成员类型,通常只会遇到汇编错误,因为无法以您调用的方式调用成员函数。如果您想更限制它,可以使用Sfinae技巧。
相关文章:
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- C++:功能在输出前自动使用50减/增加输入数
- 在Arduino中将字符串转换为(逗号分隔的十六进制)字符串到无符号字符数组
- 在 C++ 中使用带有十六进制十进制和八进制数的 unsetf
- 如何实现删除数组的功能?
- 借助功能将 2D 转换为 1D 数组
- 将 2D 数组传递给大小为变量的功能
- 为什么必须动态分配扩展数组才能使此功能正常工作C++
- 字符数组到十六进制字符串的转换 - 意外输出
- C++中用于结构的纯数组的类似于TableView/DataFrame的通用功能
- 将字符串转换为十六进制数组c++
- 用于检查我们是否有有效数独的辅助功能
- C++ 用户定义的数组被解释为十六进制?
- 十六进制 QString 表示为无符号字符数组
- 共享_ptr中多功能数组的类型是什么
- 基类的通用成员功能数组
- 重复的名称检查功能数组
- 嵌套在功能数组中的循环
- C 从功能数组中调用函数
- 一个从x数制到十进制的转换器