相关疑难解决方法(0)

为什么函数不是对象?

我在标准n4296(草案)§1.8第7页中读到:

一个对象是存储的区域.[注意:函数不是对象,无论它是否以对象的方式占用存储. - 尾注]

我在网上花了几天寻找这种排斥的充分理由,没有运气.也许是因为我不完全理解对象.所以:

  1. 为什么函数不是对象?它有何不同?
  2. 这与仿函数(函数对象)有什么关系吗?

c++ function object functor

33
推荐指数
2
解决办法
3492
查看次数

C++ 11将`auto` Lambda更改为其他Lambda?

假设我有以下包含lambda的变量:

auto a = [] { return true; };
Run Code Online (Sandbox Code Playgroud)

我想稍后a回来false.我可以按照这个方针做点什么吗?

a = [] { return false; };
Run Code Online (Sandbox Code Playgroud)

此语法给出了以下错误:

binary '=' : no operator found which takes a right-hand operand of type 
'main::<lambda_a7185966f92d197a64e4878ceff8af4a>' (or there is no acceptable conversion)

IntelliSense: no operator "=" matches these operands
        operand types are: lambda []bool ()->bool = lambda []bool ()->bool
Run Code Online (Sandbox Code Playgroud)

有没有办法实现这样的事情?我想将auto变量更改为不同的lambda.我是一个初学者,所以我可能会错过一些关于autolambdas的知识.谢谢.

c++ lambda auto c++11

22
推荐指数
2
解决办法
2056
查看次数

什么是C++中的可调用对象?

我正在研究提升线程.我发现线程类有一个接受可调用对象的构造函数.什么是可调用对象?

class CallableClass
{
private:
    // Number of iterations
    int m_iterations;

public:

    // Default constructor
    CallableClass()
    {
        m_iterations=10;
    }

    // Constructor with number of iterations
    CallableClass(int iterations)
    {
        m_iterations=iterations;
    }

    // Copy constructor
    CallableClass(const CallableClass& source)
    {
        m_iterations=source.m_iterations;
    }

    // Destructor
    ~CallableClass()
    {
    }

    // Assignment operator
    CallableClass& operator = (const CallableClass& source)
    {
        m_iterations=source.m_iterations;
        return *this;
    }

    // Static function called by thread
    static void StaticFunction()
    {
        for (int i=0; i < 10; i++)  // Hard-coded upper limit
        { …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading object callable

17
推荐指数
4
解决办法
1万
查看次数

如何编写一个以仿函数为参数的函数

基本上我想这样做: 我可以使用lambda函数或std :: function对象代替函数指针吗?

显然,对于期望函数指针的函数来说,现在是不可能的.但是,它适用于需要仿函数的函数(我之前使用过stl的sort()函数)

但是,我不知道如何编写一个以仿函数为参数的函数!

任何人?

c++ visual-studio-2010

16
推荐指数
3
解决办法
1万
查看次数

C++中的函数指针vs仿函数

使用函子和函数指针有什么区别.例如

  //Functor
  struct add_x
  {
    int x;
    add_x(int y):x(y){}
    int operator()(int y)
    {
       return x+y;
    }
  };
  //Function
  int (func)(int x)
  {
     return ++x;
  }
  std::vector<int> vec();
  //fill vec with 1 2 3 4 5
  int (*f)(int) = func;//Function pointer
  std::transform(vec.begin(),vec.end(),f); //approach 1
  std::transform(vec.begin(),vec.end(),add_x(1)); //approach 2
Run Code Online (Sandbox Code Playgroud)

这两种方法都有效,但我确信会有一种方法比其他方法更受欢迎(或可能).

c++ function-pointers functor

15
推荐指数
1
解决办法
7489
查看次数

获取C(gcc)中当前函数的指针?

gcc中有一个魔术变量,它持有一个指向当前函数的指针吗?

我想有一种表包含每个函数指针的一组信息.

我知道有一个__func__变量包含当前函数的名称作为字符串但不作为函数指针.

这不是为了调用函数而是仅仅用作索引.

编辑 基本上我想做的是能够在执行当前函数之前运行嵌套函数(并且还捕获返回以执行某些操作.)基本上,这就像__cyg_profile_func_enter和__cyg_profile_func_exit(检测函数).但问题是这些仪器功能是全局的而不是功能专用的.

编辑 在Linux内核中,你可以使用unsigned long kallsyms_lookup_name(const char *name)include/linux/kallsyms.h...请注意CONFIG_KALLSYMS选项必须被激活.

c gcc function-pointers

12
推荐指数
2
解决办法
1万
查看次数

什么时候在C++中使用函数对象?

我看到函数对象经常与STL算法一起使用.功能对象是否因为这些算法而出现?你什么时候在C++中使用函数对象?它的好处是什么?

c++ stl function-object

11
推荐指数
2
解决办法
5731
查看次数

C++ Operator()括号重载

我最近问了一个关于从矢量中删除项目的问题.好吧,我得到的解决方案,但我不明白 - 我找不到任何解释它的文档.

struct RemoveBlockedHost {
    RemoveBlockedHost(const std::string& s): blockedHost(s) {}

    // right here, I can find no documentation on overloading the () operator
    bool operator () (HostEntry& entry) { 
        return entry.getHost() == blockedHost || entry.getHost() == "www." + blockedHost;
    }
    const std::string& blockedHost;
};
Run Code Online (Sandbox Code Playgroud)

用作:

hosts.erase(std::remove_if(hosts.begin(), hosts.end(), RemoveBlockedHost(blockedhost)), hosts.end());
Run Code Online (Sandbox Code Playgroud)

我查看了std :: remove_if的文档,它说只有在类重载()运算符时才可以传递一个类而不是一个函数.没有任何信息.

有谁知道链接:

    • 一本包含例子/解释的书
      或者,链接到在线文档/教程

  • 对此的帮助将不胜感激.我不喜欢在我的软件中添加代码,除非我理解它.我知道它有效,而且我(稍微)熟悉运算符重载,但我不知道()运算符是什么.

    c++ operator-overloading remove-if

    11
    推荐指数
    1
    解决办法
    2万
    查看次数

    STL功能 - 为什么?

    在C++标准模板库中,有一个"功能"部分,其中许多类使其()运算符超载.

    在C++中使用函数作为对象是否带来任何便利?

    为什么我们不能只使用函数指针呢?任何例子?

    c++ stl function-pointers function-object

    11
    推荐指数
    1
    解决办法
    2100
    查看次数

    在c中定义函数内部的函数

    我想创建一个通用函数,它返回一个函数指针,指向C/C++中的另一个函数.但是,第二个返回的函数应该能够使用第一个函数的变量.

    例,

    typedef double (*func_t)(double);
    
    func_t inverse(func_t fn) {
       // define another function here that uses fn
       double solve(double x) {
          // use fn
       }
       return &solve;
    }
    
    double sqr(double x) { return x * x; }
    
    int main() {
         func_t inv = inverse(sqr);
         printf("sqrt %d = %f\n", 100, inv(100)); 
    }
    
    Run Code Online (Sandbox Code Playgroud)

    显然gcc,g ++不允许我这样做.我可以在不使用类或结构的情况下实现此目的.

    c c++

    10
    推荐指数
    3
    解决办法
    365
    查看次数