小编Tux*_*xer的帖子

是否可以在没有任何复制操作符的类中使用C++中的std :: map?

我正在使用没有任何复制操作符的Class(Object):它现在基本上无法复制.我有一个

std::map<int,Object> objects

列出具有int标识符的对象的变量.如何在不使用复制运算符的情况下将Object添加到此映射中?我试过了

objects.insert(std::pair<0,Object()>);

但那不会编译.我想最初使用默认构造函数在地图内部创建我的对象,但是写作

objects[0]; 失败...谢谢:)

c++ constructor stdmap copy-constructor

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

C++链接运算符<< for std :: cout like usage

可能重复:
当重载operator << Operator重载时,std :: endl的类型未知

我目前正在编写一个记录器类,但该operator<<方法会导致编译器错误.这是类的最小化版本,在文件"logger.h"中:

#include <iostream>
class Logger {
public:
    Logger() : m_file(std::cout) {}

    template <typename T>
    Logger &operator<<(const T &a) {
        m_file<<a;
        return *this;
    }

protected:
    std::ostream& m_file;
};
Run Code Online (Sandbox Code Playgroud)

它包含在我的main.cpp中,并在输出字符串文字时完美地工作:

log << "hi"; 
Run Code Online (Sandbox Code Playgroud)

但是,以下内容无法编译.

#include "logger.h"
int main() {
    Logger log;

    log << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

g ++编译器报告:

src/main.cpp:5:错误:'log << std :: endl'中'operator <<'不匹配

c++ operators chaining

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

为什么我们应该在OpenGL管道的片段阶段进入眼睛空间坐标?

我正在编写一个小型3D引擎,我想知道为什么我应该进入片段着色器中的眼睛空间坐标.要做到这一点,我必须将我的相机矩阵放在制服中以转换眼坐标中的光位置,并将camera_normal矩阵放在眼坐标中.为什么每个人都使用这些坐标?我没有看到任何优势,所以如果你能帮我理解这个选择,我将不胜感激.谢谢 :)

c++ opengl shader

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

c ++中用于带参数的函数的std bind的用法(字符串)

我正在尝试在我的记录器类中创建一个std :: functions的向量.当我尝试将方法绑定到我的std :: function时:

NcursesWindow log_win("Logs",LINES-1,COLS/3,0,COLS*2/3);
std::function<void(std::string)> f = std::bind(&NcursesWindow::add_string,&log_win);
Run Code Online (Sandbox Code Playgroud)

add_string函数定义如下:

void add_string(string text);
Run Code Online (Sandbox Code Playgroud)

但是,gcc(使用gfilt插件来尝试理解模板错误)返回:

BD Software STL Message Decryptor v3.10 for gcc 2/3/4
In file included from ./inc/ncursesui.h:6:0,
from src/ncursesui.cpp:1:
functional: In static member function ‘static void _Function_handler<
    void({basic_string<char>} ...), _Bind<
        _Mem_fn<void (NcursesWindow::*)(basic_string<char>)>(
            NcursesWindow)> 
>::_M_invoke(const _Any_data &, {basic_string<char>} ...)’:
[STL Decryptor: Suppressed 1 more STL standard header message]
src/ncursesui.cpp:32:86:   instantiated from here
functional:1778:2: erreur: no match for call to ‘(
    _Bind<
        _Mem_fn<void (NcursesWindow::*)(basic_string<char>)>(
            NcursesWindow)>) (basic_string<char>)’

STL Decryptor reminders: …
Run Code Online (Sandbox Code Playgroud)

c++ templates bind

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

在c ++中创建一个类型未知的模板向量(void templates)

我有一个C++模板类,它包含一个方法指针和一个类指针,谁有单个方法call,它调用类指针上的方法指针.

调用此模板Method< C >,C是类和方法指针的类.

我想创建一个std::vector这个模板的数组(),但我希望这个向量能够包含这个模板的不同类.我的最终目标是通过这个向量并调用call每个元素的方法,即使它们有不同的类.

你会怎么做?

c++ templates

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