- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个类,我使用 std::mem_fn
在辅助函数之间进行选择。
&
为什么我的代码可以编译和运行在m_funcContainer
减速?在代码中 &
用 /**/
注释掉myStruct/*&*/
std::map < std::string, std::function<void(const myClass*, myStruct/*&*/) >> m_funcContainer
(但在 m_funcContainerInt
的情况下,编译器会出现编译错误)
error C2664: 'void (int &) const' : cannot convert argument 1 from 'int' to 'int &'
Why the compiler can convert argument 'myStruct' to 'myStruct &' in std::function
我的简化代码是
myClass.h
#include <memory>
#include <map>
#include <functional>
struct ExtraFlag
{
};
struct Flag
{
};
struct myStruct
{
std::shared_ptr<ExtraFlag> extraFlag;
std::shared_ptr<Flag> flag;
explicit myStruct()
{
}
};
class myClass
{
private:
std::map < std::string, std::function<void(const myClass*, myStruct/*&*/) >> m_funcContainer;
std::map < std::string, std::function<void(const myClass*, int/*&*/) >> m_funcContainerInt;
private:
void funcMyStruct(myStruct& arg1) const;
void funcInt(int& arg1) const;
public:
myClass();
};
myClass.cpp
#include "myClass.h"
myClass::myClass()
{
m_funcContainer["func"] = std::mem_fn(&myClass::funcMyStruct);
myStruct myStructInstance;
m_funcContainer.at("func")(this, myStructInstance);
int a;
m_funcContainerInt["func"] = std::mem_fn(&myClass::funcInt);
m_funcContainerInt.at("func")(this, a);
}
void myClass::funcMyStruct(myStruct& arg1) const
{}
void myClass::funcInt(int& arg1) const
{}
已编辑我在 Microsoft visual studio 2013 上编译
最佳答案
您的问题是 MSVC2013 在其默认设置下不是 C++ 编译器。它编译了一种与 C++ 密切相关的语言,但具有“扩展”。你正被其中一只咬伤。
/Za
将关闭(大多数?)语言扩展,我相信包括给您带来问题的那个。
我听说一些 MSVC 附带的 header (系统 header )可能与 /Za
有问题。而且,在关闭 /Za
的情况下编译和测试的代码可能会在打开 /Za
的情况下发生意外的行为变化。我会将它默认包含在新文件或项目中,如果您有一个旧项目,请激活它并测试它不会导致问题。
关于c++ - 为什么 MVS 编译器可以将参数 'myStruct' 转换为 'myStruct &' 。并且没有归档错误 C2664 : cannot convert 'myStruct' to 'myStruct &' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33345509/
示例位于 ideone.com : int passByConstPointerConst(MyStruct const * const myStruct) int passByValueConst
我有一个类,我使用 std::mem_fn在辅助函数之间进行选择。 如果我缺少 & 为什么我的代码可以编译和运行在m_funcContainer减速?在代码中 &用 /**/ 注释掉myStruct/
我正在阅读有关数组/结构默认初始化值的信息,并有以下问题: 是 memset(&mystruct, 0, sizeof mystruct)与 mystruct = { 0 }; 相同? 如果不是,有什
我正在阅读有关数组/结构默认初始化值的内容,并有以下问题: memset(&mystruct, 0, sizeof mystruct) 是否与 mystruct = { 0 }; 相同? 如果不是,有
我正在阅读有关数组/结构默认初始化值的内容,并有以下问题: memset(&mystruct, 0, sizeof mystruct) 是否与 mystruct = { 0 }; 相同? 如果不是,有
这个问题在这里已经有了答案: Is it a good idea to typedef pointers? (15 个答案) 关闭 6 年前。 我在头文件中有这一行: typedef struct
我不断收到一个错误,如果我没有在定义之前预先声明使用的结构,那么应该会发生错误,但我做到了!!:“typedef struct Campeonato Campeonato; typedef结构乔戈乔戈
我正在尝试学习 objective-c 。 这些都在我的 .m 文件里 @interface TetrisEngine () @property (nonatomic, readwrite) stru
我总是看到人们这样使用它: struct myStruct{ ... }; void func(struct myStruct s){ ... } 但我是这样使用的,省略了“struct” voi
1: void f(mystruct *a) 2: void f(const mystruct *a) 从 1->2 更改函数签名会破坏 C 中的 API/ABI 吗? 改变 2->1 怎么样? 最佳
我是从Qt开始的,现在已经困扰了很长时间(据说是)。我确信这只是我在C++中看不到的东西。无论如何,请查看以下简单代码,并指出我在做什么错: typedef struct FILEHEADER {
我的服务器以 JSON 格式返回一组照片信息: "pics":[{"ID":182,"ID_member":39,"fn":"b69ea6f6c88b58c67a331aa3c5eaff81.jpg"
我正在尝试在项目中使用 STL 列表,但遇到以下问题。 我希望我的列表存储一个结构。比如这个 struct mystruct { int x; int y; }; 然后我使用迭代器像这
这个程序编译和链接: struct A{ int m; } void main() { A a; int x = a.m; } 虽然这不是: struct A{ int
我有一个 QMap与 myStruct { QString firstname; QString lastname; QString status; } 如何对 QMap 进行
我一直在关注 Go 编程语言之旅以熟悉这门语言,而这门语言的一个特性让我感到疑惑。 关于Struct Literals的步骤,他们解释说您可以通过多种方式实例化结构: type Vertex stru
我无法对编译时错误进行排序。我正在编译 C 项目。我的 main.c 文件有一个 #include,它可以在其中获取我在项目中使用的结构的定义。关键是每次我尝试编译我的代码时都会出现错误 struct
我在以下头文件中定义了一个名为 Spiketimesolver 的结构: #include #include "plot_support.h" struct Spiketimesolver {
我有一些可变状态需要在线程之间共享。我关注了concurrency section Rust 书的一部分,它在线程之间共享一个向量并对其进行变异。 我需要共享一个最终单态化的通用结构,而不是向量。这是
我有 MyStruct 对象列表。 struct Task { std::function _fn = nullptr; std::chrono::system_clock::time
我是一名优秀的程序员,十分优秀!