Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >如何否定mem_fn创建的函数指针的结果

如何否定mem_fn创建的函数指针的结果
EN

Stack Overflow用户
提问于 2016-11-22 03:10:03
回答 1查看 197关注 0票数 0

我有一个包装类的更复杂的版本,它封装了用户类型的std::vector,如下所示。

代码语言:javascript
代码运行次数:0
复制
struct UserType1Encapsulator
{
   template <typename F>
   UserType1Encapsulator& Filter( F filterFunction )
   {
       std::vector<userType1> newList;
       for ( size_t i = 0; i < iTerrainList.size(); i++)  --> can't use range for loop vs2010 
       {
           if ( filterFunction(iTerrainList[i]) )
               newList.push_back(iTerrainList[i]);

       }
       encapsulatedList = newList;
       return *this;
   }

std::vector<userType1> encapsulatedList;
}

我在做一些链接的事情,比如Filter.Filter.Map等等。

一切都很好,直到我发现我需要否定函数指针的操作,这是我正在传递的。

代码语言:javascript
代码运行次数:0
复制
   userVec.Filter( std::mem_fn(&userType1::isCopy) );

我需要用这样的方法

代码语言:javascript
代码运行次数:0
复制
userVec.Filter( std::not1( std::mem_fn(&userType1::isCopy)) );

但我不知道如何使用它,不幸的是,我无法访问lamdbas,因为即使是用GCC 4.8编译,现在代码也应该用vs2010编译。

否定std::mem_fn结果的正确方法是什么,哪种方法将在vs2010中编译?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-22 03:22:59

当您没有lambdas时,请记住,它们只是可调用对象的语法糖。创建您自己的通用否定可调用:

代码语言:javascript
代码运行次数:0
复制
template <typename TFunction>
struct negator
{
    // `_f` will be your mem_fn
    TFunction _f;

    negator(TFunction f) : _f(f) { }

    bool operator()(/* same arguments as isCopy */) const
    {
        return !f(/* same arguments as isCopy */);
    }
};

template <typename TFunction>
negator<TFunction> make_negator(TFunction f)
{
    return negator<TFunction>(f);
}

然后,您应该能够按以下方式使用它:

代码语言:javascript
代码运行次数:0
复制
userVec.Filter( make_negator( std::mem_fn(&userType1::isCopy)) );

full wandbox example

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40740303

复制
相关文章
函数指针的定义方式,和指针函数的区别,函数指针数组
可以类比数组指针:int(*p)[10] 方式1: #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> void fun1(int a, int b) { printf("%d+%d", a, b); } void test() { //函数指针定义的三种方式 //1.先定义出函数类型,再通过函数类型定义指针变量 typedef void(FUNC_TYPE)(int, int); FUNC_TYPE* func = fun1; func(10,2
大忽悠爱学习
2021/03/02
1.3K0
函数指针的定义方式,和指针函数的区别,函数指针数组
函数指针数组的指针
pf是一个指针,这个指针指向一个有3个元素的数组,每个元素是一个参数为char* ,返回值为char *的指针。 示例:
Daotin
2018/08/31
1.3K0
函数指针数组的指针
函数指针的定义 函数指针的具体作用
在现代网络技术飞速发展的今天,人们的生活越来越离不开手机上的各种软件。这些软件都有一个共同的特点,他们都是由几种语言编码而成的。最常见的计算机语言是c语言和c++语言。在C语言中,有一个大家必须要认识的东西——函数指针。那么这究竟是一个什么方法?这个有什么作用?下面就来为大家介绍一下。
用户8739405
2021/07/09
1.9K0
函数指针和指针函数的学习小结
函数指针是指向函数的指针,指针函数是指一个函数的返回值是一个指针,但下面的几道题还是感觉很迷惑。各位能否讲的详细点呢?
阳光岛主
2019/02/19
1.1K0
C/C++如何快速区分指针数组|数组指针|函数指针|指针函数
如何区分这些概念,主要还是看后面两个字,中文表达模式“​表语+定性名词​”,​所以关键的都是后面的这个名词​:
音视频牛哥
2022/03/15
5860
函数指针,指针函数,返回值为指针的函数「建议收藏」
在学习C语言时,一个比较容易混淆的概念就是函数指针、指针函数、返回值为指针的函数。本文将对这三个概念进行区分。指针函数就是返回值为指针的函数,两个本质上是同一事物,只是叫法不同。函数指针就是一个指向函数的指针,本质上是一个指针,只是这个指针指向的对象是函数,而不是一般意义上的存储对象。
全栈程序员站长
2022/06/25
3K0
C++函数指针、指针函数、返回值为函数指针的函数浅谈
函数指针、指针函数是C中重要而容易混淆的概念,博主将通过两个实例来说明这两个截然不同的概念。 而返回值为函数指针的指针函数就更难理解了,放在文章的最后来介绍。
全栈程序员站长
2022/06/25
1.6K0
C++函数指针、指针函数、返回值为函数指针的函数浅谈
指向函数的指针
程序中定义函数后,对程序进行编译时,编译系统为函数分配一段存储空间存储二进制代码,这段内存空间的起始地址(也称入口地址)称为函数的指针。
pigeon
2022/04/11
8090
指向函数的指针
函数指针的用法
在C++编程的时候,有时候我在考虑,如果把一个函数能够当作一个变量,被调用、传递就会方便很多,之前学习了lambda表达式,用lamda表达式会比较方便。下面可以介绍一种新的方法,函数指针。
全栈程序员站长
2022/07/09
3190
指向函数的指针
Author: bakari   Date: 2012.8.8 做好总结我觉得是把知识学扎实必不可少的实践环节。这个知识点是当初自己在学习这一块做的一些笔记,现在在知识提升的情况下将它重新整理一下以作巩固之用。 我们知道一段代码在内存中是由地址的,一个函数在编译时会被分配给一个入口地址,这个地址就是该函数中第一条指令的地址,这就是函数的指针。当调用一个函数时出了通过函数名来调用之外,还可以通过指向该函数的指针变量来调用。切记,和一切指针变量一样,一个指向函数的指针其初值也不能为空。因为它在使用之前必须被赋予
Linux云计算网络
2018/01/10
1.3K0
指向函数的指针
c语言之函数指针和指针函数的区别
函数指针:是指向函数的指针变量,因而函数指针本身应该是指针变量,只不过指针变量指向函数。
西西嘛呦
2020/08/26
1.1K0
让类成员函数指针成为可调用对象
    类成员函数指针实践上是一个指针类型,不可直接通过调用运算符()作为可调用对象调用,一般调用该类成员函数指针需要指定该指针对应的对象。
学徒漠筱歌
2022/07/17
1.1K0
周正宁:研发最大的挑战是不断否定常规 否定自己
LiveVideoStack:周正宁你好,能否简要介绍下自己,包括目前的主要工作及关注领域?
LiveVideoStack
2021/09/01
5330
Golang指针的操作以及常用的指针函数
在这个示例中,swap()函数使用指针作为参数,从而可以修改main()函数中传递的变量a和b的值。
周小末天天开心
2023/10/16
2210
【C++】函数重载 ④ ( 函数指针定义的三种方式 | 直接定义函数指针 | 通过 函数类型 定义 函数指针 | 通过 函数指针类型 定义 函数指针 )
先定义一个函数 , 在本章节中使用不同的方法 , 定义该函数 对应 的 函数指针 ;
韩曙亮
2023/10/15
1880
【C++】函数重载 ④ ( 函数指针定义的三种方式 | 直接定义函数指针 | 通过 函数类型 定义 函数指针 | 通过 函数指针类型 定义 函数指针 )
【C++】函数重载 ④ ( 函数指针定义的三种方式 | 直接定义函数指针 | 通过 函数类型 定义 函数指针 | 通过 函数指针类型 定义 函数指针 )
先定义一个函数 , 在本章节中使用不同的方法 , 定义该函数 对应 的 函数指针 ;
韩曙亮
2023/10/15
2000
【C++】函数重载 ④ ( 函数指针定义的三种方式 | 直接定义函数指针 | 通过 函数类型 定义 函数指针 | 通过 函数指针类型 定义 函数指针 )
c专题之指针---函数指针与指针函数与的区别用法
下面我们先来看最后一位网友的解释,怎么觉得他有道理呢,于是乎我自己用代码测试了一下,发现在定义结构体时,你在结构体里面没有放任何数据类型的定义,这个时候结构体不占用内存大小的(为啥会出现这种情况,我的理解是结构体类型是我们人为定义的一种(符合计算机的)数据类型),一般书上会叫复合类型,看书看的最多是这个叫法(那是因为后面结构体里面定义的各种数据类型的变量,甚至函数定义,所以这个结构体就像一个“黑洞”一样,当有数据类型被吸去,后面就可以一直吸东西,但是这个“黑洞”大小不能超过计算机所规定的内存大小的,这里纯属是个人的理解,如有理解不切当的地方,可以批评指出,非常欢迎您的批评意见);下面我们来看来代码来说话(其实下面我也写了空数组,就是在定义的时候,没有初始化数组元素大小,但是数组还是占用内存空间大小的,这是因为在数组类型定义的时候,计算机已经给它分配的内存大小):
用户6280468
2022/03/18
7050
c专题之指针---函数指针与指针函数与的区别用法
c语言函数指针的用法_函数指针作为形参
函数指针和指针函数,在学习 C 语言的时候遇到这两个东西简直头疼,当然还有更头疼的,比如什么函数指针函数、指针函数指针、数组指针、指针数组、函数指针数组等等,描述越长其定义就越复杂,当然理解起来就越难,特别是刚开始学习这门语言的童鞋,估计碰到这些东西就已经要崩溃了,然后好不容易死记硬背下来应付考试或者面试,然后过了几天发现,又是根本不会用,也不知道该在哪些地方用,这就尴尬了。
全栈程序员站长
2022/09/23
6600
C语言函数传参:指针的指针
今天同事问了一个问题:在函数参数中传递指针的指针,很常用的一个场景,重新梳理一下记录于此,以后如果有类似的问题直接发这篇小总结就可以了。
IOT物联网小镇
2021/05/13
2.1K0
C语言函数传参:指针的指针
7.4 指向函数的指针
①定义指向函数的指针变量,并不意味着这个指针变量可以指向任何函数,它只能指向在定义时指定的类型的函数
小林C语言
2019/08/09
8500

相似问题

创建返回std::mem_fn或boost::mem_fn的通用包装器

14

成员对象函数的mem_fn

317

如何创建指向函数指针的指针?

38

在函数之间传递元素。得到否定的结果

21

成员的mem_fn到mem_fn

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档