C++ 接受指向常量和非常量函数的指针的typedef模板
下面是指向接受两个int并返回一个int的类方法的指针:C++ 接受指向常量和非常量函数的指针的typedef模板,c++,c++14,member-function-pointers,C++,C++14,Member Function Pointers,下面是指向接受两个int并返回一个int的类方法的指针: template <typename T> using TFunction = int (T::*)(int, int); 模板 使用TFunction=int(T::*)(int,int); 我只能在这里传递非常量方法。 如何更改此模板,使其同时接受常量和非常量方法?此情况对于有条件的: template <typename T> using TFunction = std::conditional_t<
template <typename T>
using TFunction = int (T::*)(int, int);
模板
使用TFunction=int(T::*)(int,int);
我只能在这里传递非常量方法。
如何更改此模板,使其同时接受常量和非常量方法?此情况对于有条件的:
template <typename T>
using TFunction = std::conditional_t<
std::is_const_v<T>,
int (T::*)(int, int) const,
int (T::*)(int, int)
>;
模板
使用TFunction=std::conditional\u t<
标准::是常数吗,
int(T::*)(int,int)常数,
int(T::*)(int,int)
>;
现在
t函数
是int(Foo::*)(int,int)
,t函数
是int(Foo:*)(int,int)const
,你的意思是const
和非const
函数,对吗?没有一个指针类型可以同时执行这两个操作。我不接受任何成员。它接受一个T
。你对你的工作做得太少了。这是一个XY问题。名称不能同时引用两种类型。您可以使用TCFunction=int(T::*const)(int,int)执行模板
为const
函数命名,或者使用std::function
或您自己的版本键入擦除函数指针。但是,对于具有常量成员函数的非const Foo类型呢?@Jodocus这是一个转移视线的问题:我正在使用“const
或非const
”命令参数设置为T
,而不是将其设置为单独的bool
。它与您稍后使用的实际Foo
的const
无关,您仍然可以调用t函数对Foo
:)删除我的原始注释,因为这太棒了。尽管通常T
必须是一个id表达式(因此通常不能是const T
),模板上下文允许使用类型信息,并保持指向成员的指针格式良好。