C++中委托的一般概念是什么?它们是什么,它们如何使用以及它们用于什么?
我想首先以"黑匣子"的方式了解它们,但是关于这些事情的内容的一些信息也会很棒.
这不是最纯粹或最干净的C++,但我注意到我工作的代码库有很多.我希望能够理解它们,所以我可以使用它们,而不必深入研究可怕的嵌套模板.
这两个代码项目文章解释了我的意思,但不是特别简洁:
在函数之前使用inline关键字和在头文件中声明整个函数之间有什么区别?
所以...
int whatever() { return 4; }
Run Code Online (Sandbox Code Playgroud)
VS
.H:
inline int whatever();
Run Code Online (Sandbox Code Playgroud)
的.cpp:
inline int myClass::whatever()
{
return 4;
}
Run Code Online (Sandbox Code Playgroud)
就此而言,这是做什么的:
inline int whatever() { return 4; }
Run Code Online (Sandbox Code Playgroud) 如果我在一个类中有一个对象向量,我想在另一个类中进行更改,我会尝试通过引用传递所有信息.
虽然我需要通过引用到底需要什么?向量?对象?都?
基本上我要问的是:这些之间有什么区别?
vector&<object> blah; // A reference to a vector of objects?
vector<object&> blah; // A vector of references to objects?
vector&<object&> blah; // A reference to a vector of references to objects???
Run Code Online (Sandbox Code Playgroud)
我真的不确定如何像容器一样引用数组.这些合法吗?
我在switch语句中得到一个'case expression not constant'错误.但是,标头为使用的常量提供了定义,构造函数在其初始化列表中为它们提供了初始化.
另外,当我将鼠标悬停在"问题"语句上时,它会将它们标识为常量.
const int ThisClass::EXAMPLE_CONSTANT
error expression must have a constant value
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎有点违反直觉.我做了一些研究,发现了其他人的类似问题.他们被告知所有常量实际上必须在'main'中初始化,并且这是语言的限制.这是真的吗?似乎不太可能.
拥有对象引用的向量是否合法,如下所示?
vector<Agent&> seenAgents;
Run Code Online (Sandbox Code Playgroud)
例如,哪些会被场景中的一些但不是所有对象填充?
我有一个Agent对象的向量,但上面概述的向量应该只包含每个代理当前可以看到的对象 - 这意味着将一直添加和删除引用.
这是语言允许的吗?此外,还有什么我需要注意的吗?如果我从向量中删除引用它会持续存在吗?这是内存泄漏吗?
我似乎在声明向量的行上得到了这个错误:
error C2528: 'pointer' : pointer to reference is illegal
Run Code Online (Sandbox Code Playgroud)
这是直接与线路有关还是最有可能发生在其他地方?它正在构造函数初始化列表中初始化,如下所示:
seenAgents(vector<Agents&>())
Run Code Online (Sandbox Code Playgroud) 我需要一个数据结构,可以通过与它们关联的浮动键对对象进行排序,最先降低.问题是密钥代表成本所以经常有重复,我不关心这个,因为如果两个具有相同的成本,我只会抓住第一个,因为它没有区别,问题是编译器抱怨.
是否存在行为方式相同但允许重复键的数据结构?
编辑 - 我仍然需要重复项,因为如果一个结果是一个死胡同,我抓住下一个(他们是一个*搜索中的节点)
所以为了清楚起见,它需要允许按顺序排序的重复键.
我已生成一个大约4gb的.vsp文件,当我尝试打开它时出现此错误.有谁知道为什么会这样?当我分析较少量的代码时,同样的事情也适用.
我已经将这个简单的方法从C#转换为C++.它读取路径表并填充整数列表(或整数向量的向量).
路径表中的示例行类似于
0 12 5 16 n
Run Code Online (Sandbox Code Playgroud)
我知道有一般这样做的更好的办法,但现在我只想知道为什么我的C++代码正在采取这么多的时间.例如10分钟而不是C#版本的10秒钟.这是我的C++代码.我猜我做的事情有点严重错误.
//Parses the text path vector into the engine
void Level::PopulatePathVectors(string pathTable)
{
// Read the file line by line.
ifstream myFile(pathTable);
for (unsigned int i = 0; i < nodes.size(); i++)
{
pathLookupVectors.push_back(vector<vector<int>>());
for (unsigned int j = 0; j < nodes.size(); j++)
{
string line;
if (getline(myFile, line)) //Enter if a line is read successfully
{
stringstream ss(line);
istream_iterator<int> begin(ss), end;
pathLookupVectors[i].push_back(vector<int>(begin, end));
}
}
}
myFile.close();
}
Run Code Online (Sandbox Code Playgroud)
这是C#版本: …
c++ ×9
c# ×3
vector ×2
delegates ×1
delegation ×1
dictionary ×1
inline ×1
io ×1
optimization ×1
profiling ×1
std ×1
stl ×1