我正在尝试通过使用前向声明并将#includes移动到实现文件中来简化一堆头文件"include spaghetti".但是,我继续遇到以下情况:
//Foo.h
#include "Bar.h"
class Foo
{
public:
void someMethod(Bar::someType_t &val);
};
//Bar.h
.
.
.
class Bar
{
public:
typedef std::vector<SomeClass> someType_t;
};
Run Code Online (Sandbox Code Playgroud)
我希望在尽可能多的情况下删除#include"Bar.h".我还看到Bar.h中的typedef列在Bar类之外的情况.我假设两种情况都可以用同样的方式解决.
有任何想法吗?
我添加了一个SplitContainer,在两个窗格之间有一个水平条.我可以添加内容,并上下移动栏以调整容器的大小,但栏本身是不可见的.我希望我的应用程序的用户看到这两个区域之间的可见分割.我怎样才能做到这一点?
我正在研究一些看似写得不好的现有c ++代码,并且经常被调用.我想知道我是否应该花时间更改它,或者编译器是否已经将问题优化掉了.
我正在使用Visual Studio 2008.
这是一个例子:
void someDrawingFunction(....)
{
GetContext().DrawSomething(...);
GetContext().DrawSomething(...);
GetContext().DrawSomething(...);
.
.
.
}
Run Code Online (Sandbox Code Playgroud)
我将如何做到这一点:
void someDrawingFunction(....)
{
MyContext &c = GetContext();
c.DrawSomething(...);
c.DrawSomething(...);
c.DrawSomething(...);
.
.
.
}
Run Code Online (Sandbox Code Playgroud) 我希望能够拥有某种类型的向量向量,例如:
vector<vector<MyStruct> > vecOfVec;
Run Code Online (Sandbox Code Playgroud)
然后我创建一个MyStruct矢量,并填充它.
vector<MyStruct> someStructs;
// Populate it with data
Run Code Online (Sandbox Code Playgroud)
然后最后添加someStructs到vecOfVec;
vecOfVec.push_back(someStructs);
Run Code Online (Sandbox Code Playgroud)
我想要做的是避免在推送向量时使用复制构造函数调用.我知道这可以通过使用指针向量来实现,但我想尽可能避免这种情况.
我想到的一个策略似乎有效,但我不知道我是否过度设计了这个问题.
// Push back an empty vector
vecOfVec.push_back(vector<MyStruct>());
// Swap the empty with the filled vector (constant time)
vecOfVec.back().swap(someStructs);
Run Code Online (Sandbox Code Playgroud)
这似乎会添加我的矢量而不必做任何副本,但这似乎是编译器在优化过程中已经做的事情.
你认为这是一个好策略吗?
编辑:由于一些建议,简化了我的交换声明.