小编Tim*_*upe的帖子

Forward在c ++中声明一个类的public typedef

我正在尝试通过使用前向声明并将#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类之外的情况.我假设两种情况都可以用同样的方式解决.

有任何想法吗?

c++ typedef forward-declaration

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

.NET SplitContainer使用C#Windows窗体

我添加了一个SplitContainer,在两个窗格之间有一个水平条.我可以添加内容,并上下移动栏以调整容器的大小,但栏本身是不可见的.我希望我的应用程序的用户看到这两个区域之间的可见分割.我怎样才能做到这一点?

c# user-interface winforms

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

c ++优化

我正在研究一些看似写得不好的现有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)

c++ optimization performance

4
推荐指数
3
解决办法
923
查看次数

避免使用向量向量进行复制

我希望能够拥有某种类型的向量向量,例如:

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)

这似乎会添加我的矢量而不必做任何副本,但这似乎是编译器在优化过程中已经做的事情.

你认为这是一个好策略吗?

编辑:由于一些建议,简化了我的交换声明.

c++ optimization memory-management stl vector

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