相关疑难解决方法(0)

最终C++书籍指南和列表

这个问题试图收集每年出版的数十本不良C++书籍中的少数珍珠.

与许多其他编程语言不同,这些编程语言经常从互联网上的教程中随处获取,很少有人能够快速学习C++,而无需学习编写精良的C++书籍.这样做太复杂了.事实上,它是如此庞大和复杂,有很多非常糟糕的C++书籍.我们并不是在谈论糟糕的风格,而是体育明显的事实错误促进糟糕的编程风格.

请编辑接受的答案,以提供高质量的书籍和近似的技能水平 - 最好 C++聊天室讨论您的添加.(如果他们不同意建议,常客可能会毫不留情地撤销你的工作.)添加一篇关于你亲自阅读/受益的每本书的简短描述/描述.随意讨论质量,标题等.符合标准的书籍将被添加到列表中.由C和C++用户协会(ACCU)撰写评论的图书都有指向评论的链接.

*注意:常见问题和其他资源可以在C++标签信息.

c++ c++-faq

4246
推荐指数
1
解决办法
224万
查看次数

带括号的成员函数的地址出错

我找到了有趣的东西.错误消息说明了一切.在获取非静态成员函数的地址时不允许使用括号的原因是什么?我在gcc 4.3.4上编译了它.

#include <iostream>

class myfoo{
    public:
     int foo(int number){
         return (number*10);
     }
};

int main (int argc, char * const argv[]) {

    int (myfoo::*fPtr)(int) = NULL;

    fPtr = &(myfoo::foo);  // main.cpp:14

    return 0;

}
Run Code Online (Sandbox Code Playgroud)

错误:main.cpp:14:错误:ISO C++禁止获取非限定或带括号的非静态成员函数的地址,以形成指向成员函数的指针.说'&myfoo :: foo'

c++ function-pointers pointer-to-member

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

std :: bind如何与成员函数一起使用

我正在使用std::bind但是当我们将它与成员类函数一起使用时,我仍然不知道它是如何工作的.

如果我们有以下功能:

double my_divide (double x, double y) {return x/y;}
Run Code Online (Sandbox Code Playgroud)

我完全理解下一行代码:

auto fn_half = std::bind (my_divide,_1,2);               // returns x/2

std::cout << fn_half(10) << '\n';                        // 5
Run Code Online (Sandbox Code Playgroud)

但是现在,通过以下代码我们有一个绑定到成员函数我有一些问题.

struct Foo {
    void print_sum(int n1, int n2)
    {
        std::cout << n1+n2 << '\n';
    }
    int data = 10;
};

Foo foo;

auto f = std::bind(&Foo::print_sum, &foo, 95, _1);
f(5);
Run Code Online (Sandbox Code Playgroud)
  • 为什么第一个参数是参考?我想得到一个理论上的解释.

  • 第二个参数是对象的引用,对我来说是最复杂的部分需要理解.我认为这是因为std::bind需要一个背景,我是对的吗?总是这样吗?std::bind当第一个参数是成员函数时,是否有某种实现要求引用?

c++ std stdbind c++11

21
推荐指数
2
解决办法
3万
查看次数

什么是PVOID数据类型?

有人可以解释PVOID在以下函数中使用的是什么以及如何使用它:

BOOL DoSomething(PVOID pMemPhy)
Run Code Online (Sandbox Code Playgroud)

c++ com pointers

14
推荐指数
2
解决办法
4万
查看次数

std :: function在c ++中使用静态分配

我在一个内存受限的嵌入式环境中工作,其中malloc/free new/delete是不可取的,我正在尝试使用std :: function模式来注册回调.我无法访问目标代码中的任何STL方法,因此我不得不自己复制一些STL功能.函数指针对我来说不是一个选项,因为调用者必须有捕获.

例如,我希望声明一个类邮箱,其中可以注册onChange事件

class Mailbox {
    std::function<void(int,int)> onChange;
};
Run Code Online (Sandbox Code Playgroud)

这样,调用者可以注册一个lambda onChange处理程序,它可以捕获这个或其他对处理事件很重要的变量.

由于这是API的一部分,我想为Mailbox的用户提供最大的灵活性,以提供函数指针,lambda或functor.

我已经设法找到一个看起来特别低开销的一个很好的实现,std::function并且正是我需要的,除了它涉及动态内存.

如果你看下面的代码,动态内存只用在一个地方,它看起来完全作用于被模板化的对象,向我建议它的大小应该在编译时知道.

任何人都可以帮助我理解如何重构这个实现,以便它是完全静态的,并删除使用new/malloc?我无法理解为什么CallableT的大小在编译时无法计算.

下面的代码(不适合胆小的人).注意,它使用make_unique/ unique_ptr但可以很容易地用new和*替换它们并且我已成功测试了该用例.

#include <iostream>
#include <memory>
#include <cassert>
using namespace std;

template <typename T>
class naive_function;

template <typename ReturnValue, typename... Args>
class naive_function<ReturnValue(Args...)> {
public:
    template <typename T>
    naive_function& operator=(T t) {
        callable_ = std::make_unique<CallableT<T>>(t);
        return *this;
    }

    ReturnValue operator()(Args... args) const {
        assert(callable_);
        return callable_->Invoke(args...);
    }

private:
    class ICallable {
    public:
        virtual ~ICallable() = …
Run Code Online (Sandbox Code Playgroud)

c++ lambda type-erasure

7
推荐指数
2
解决办法
1040
查看次数

在C++中调用(调用)函数的方式有多少?

我知道一种调用函数的方法:

func(x, y);
Run Code Online (Sandbox Code Playgroud)

有更多方法可以调用函数吗?

c++ function

4
推荐指数
2
解决办法
1574
查看次数

如何使用C/C++创建回调函数

C\C++是否支持回调函数的机制?以及如何创建它?我写了几个代码,用C++创建回调函数但是失败了..

    #include<iostream>
    using namespace std;

    void callee()
    {
         printf("callee\n"); 
         printf("calleeeeeeeeee\n"); 
    }

    void callback(void* func)
    {
         printf("callback\n");     
    }

    int main()
    {
        void (*call)(void*);
        void (*call2)(void);
        call2 = &callee;
        call = &callback;
        call((void*)call2);    
        getchar();
        return 0;    
    }
Run Code Online (Sandbox Code Playgroud)

c++ callback

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

在C++中实现in的回调?

正如标题所要求的那样,我发现自己无法在C++中实现简单(ha)的回调函数.

现在,如果您正在考虑"我确定我之前已经看到了问题/答案",那么您绝对正确,即:c ++中的回调函数

我重新发布的原因是我无法获得任何工作.我已经尝试将我完全理解的第一个答案[1]直接应用到我的代码中; 但我得到30个错误.

这30个错误的第一个问题,我不明白.它与typedef声明有关:

  typedef std::tr1::function<int (const GameCharacter&)> HealthCalcFunc;
Run Code Online (Sandbox Code Playgroud)

似乎缺少'tr1':

..\..gLib\..sor.h(47) : error C2039: 'function' : is not a member of 'std::tr1'
Run Code Online (Sandbox Code Playgroud)

以下错误让人想起失踪的';' 失踪或类似:

..\..gLib\..sor.h(47) : error C2143: syntax error : missing ';' before '<'
..\..gLib\..sor.h(47) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
..\..gLib\..sor.h(47) : error C2238: unexpected token(s) preceding ';'
..\..gLib\..sor.h(51) : error C2061: syntax error : identifier 'DataProcessorFunc'
..\..gLib\..sor.h(104) : error C2146: syntax error : missing ';' …
Run Code Online (Sandbox Code Playgroud)

c++

0
推荐指数
1
解决办法
350
查看次数

使用回调函数和抽象基类的虚函数有什么区别?

像标题一样.作为一名新的程序员,了解我的项目机制以及使用它们的不同之处非常重要.任何人都可以给我一个答案,谢谢!

c++

-2
推荐指数
1
解决办法
3475
查看次数