Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.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++ 接受指向常量和非常量函数的指针的typedef模板_C++_C++14_Member Function Pointers - Fatal编程技术网

C++ 接受指向常量和非常量函数的指针的typedef模板

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<

下面是指向接受两个int并返回一个int的类方法的指针:

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
),模板上下文允许使用类型信息,并保持指向成员的指针格式良好。