小编MOn*_*DaR的帖子

dynamic_cast的表现?

在阅读问题之前:
这个问题不是关于它的使用有多大dynamic_cast.它只是它的表现.

我最近开发了一个dynamic_cast经常使用的设计.
在与同事讨论时,几乎每个人都说dynamic_cast不应该使用它,因为它的表现不好(这些是有不同背景的同事,在某些情况下彼此不认识.我在一家大公司工作)

我决定测试这种方法的性能而不是仅仅相信它们.

使用以下代码:

ptime firstValue( microsec_clock::local_time() );

ChildObject* castedObject = dynamic_cast<ChildObject*>(parentObject);

ptime secondValue( microsec_clock::local_time() );
time_duration diff = secondValue - firstValue;
std::cout << "Cast1 lasts:\t" << diff.fractional_seconds() << " microsec" << std::endl;
Run Code Online (Sandbox Code Playgroud)

上面的代码使用boost::date_timeLinux上的方法来获取可用的值.
我已经完成dynamic_cast了三合一执行,测量它们的代码是相同的.

执行结果如下:
Cast1持续时间:74
microsec Cast2持续时间:2
microsec Cast3持续时间:1微秒

第一次施法总是花费74-111微秒,同样执行的以下演员需要1-3微秒.

最后我的问题
是:dynamic_cast真的表现不好吗?
根据测试结果,它没有.我的测试代码是否正确?
为什么这么多开发人员认为如果不是这么慢呢?

c++ performance dynamic-cast boost-date-time

39
推荐指数
5
解决办法
3万
查看次数

使用Boost.Asio获取本地IP地址

我目前正在寻找一种获取本地IP地址的便携方式.因为我正在使用Boost,我认为使用Boost.Asio来完成这项任务是个好主意.

网上有几个例子可以解决问题.例子:

官方Boost.Asio文档

一些亚洲页面

我只是略微修改了两个代码.Boost.Doc上的代码更改为不解析"www.boost.org",而是"localhost"或我的主机名.为了获取主机名,我使用boost :: asio :: ip :: host_name()或直接键入它作为字符串.

另外,我编写了自己的代码,它是上述示例和我从Boost文档和其他示例中收集的(小)知识的合并.

所有的资源都有效,但他们只返回了以下IP:
127.0.1.1(这不是拼写错误,最后是.1.1)
我运行并使用GCC 4.4.1在Ubuntu 9.10上编译代码

一位同事在他的机器上尝试了相同的代码,得到了
127.0.0.2(也不是一个错字......)
他用GCC 4.4.1编译并运行在Suse 11.0上(我不是100%肯定)

我不知道是否可以更改localhost(127.0.0.1),但我知道我或我的同事都没有这样做.ifconfig表示loopback使用127.0.0.1.ifconfig还找到我要搜索的公共IP(在我的情况下是141.200.182.30,子网是255.255.0.0)

这是一个Linux问题,代码不像我想象的那么便携吗?我是否需要更改其他内容或Boost.Asio根本不能解决我的问题?

我知道在Stackoverflow和其他页面上有很多关于类似主题的问题,但我找不到在我的情况下有用的信息.如果你有了有用的链接,那么如果你能指出我就很好.

PS:这是我在Boost.Doc中使用的修改代码:

#include <boost/asio.hpp>
using boost::asio::ip::tcp;    

boost::asio::io_service io_service;
tcp::resolver resolver(io_service);
tcp::resolver::query query(boost::asio::ip::host_name(), "");
tcp::resolver::iterator iter = resolver.resolve(query);
tcp::resolver::iterator end; // End marker.
while (iter != end)
{
    tcp::endpoint ep = *iter++;
    std::cout << ep << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

c++ ip-address boost-asio

30
推荐指数
3
解决办法
3万
查看次数

C++中的接口继承

我有以下类结构:

class InterfaceA
{ 
   virtual void methodA =0;
}

class ClassA : public InterfaceA
{
   void methodA();
}

class InterfaceB : public InterfaceA
{
   virtual void methodB =0;
}

class ClassAB : public ClassA, public InterfaceB
{ 
   void methodB(); 
}
Run Code Online (Sandbox Code Playgroud)

现在,以下代码无法编译:

int main()
{
    InterfaceB* test = new ClassAB();
    test->methodA();
}
Run Code Online (Sandbox Code Playgroud)

编译器说该方法methodA()是虚拟的而不是实现的.我认为它是在ClassA(实现InterfaceA)中实现的.有谁知道我的错在哪里?

c++ inheritance interface

17
推荐指数
3
解决办法
2万
查看次数

让两个UDP服务器监听同一个端口?

我有一个客户端通过UDP广播发送数据.(比如说127.0.0.255:12345)

现在我想让多个服务器监听这些数据.要在本地计算机上执行此操作,他们需要共享端口12345以进行侦听.

我的问题是,如果可能,如果有任何不利之处,并且这种方法可能存在问题.

不幸的是,有一种替代方案会带来很多开销:
实现某种注册过程.在启动时,每个服务器都告诉客户端它的端口.客户端然后将消息发送到每个端口(必须多次发送数据,需要实现某种握手......)
你知道更好的替代方案吗?

如果重要:
我正在使用C++和Boost :: Asio.该软件应该是可移植的(主要是Linux和Windows).

networking udp network-programming

15
推荐指数
2
解决办法
3万
查看次数

创建自己的Boost :: Archive实现

我目前正在创建一个使用Boost :: Serialization的概念,它需要实现自己的Boost :: Archive,因为数据必须以某种方式被序列化.

有关于在文档中实现自定义存档的文档:http: //www.boost.org/doc/libs/1_44_0/libs/serialization/doc/index.html

但我很好奇网上任何地方是否有其他(reallife)示例.我找不到任何东西.也许有人可以指点我的来源或文章.

c++ serialization boost archive

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

使用数组而不是std :: vector的优点?

我目前看到很多标记为C++的问题,并且是关于处理数组的.
甚至还有一些问题会询问有关阵列的方法/功能,而这些问题std::vector可以提供没有任何魔力的.

所以我想知道为什么这么多开发人员std::vector在C++ 中选择数组呢?

c++ arrays stl coding-style vector

9
推荐指数
2
解决办法
9033
查看次数

连接boost :: dynamic_bitset或std :: bitset

连接2个位集的最佳方法是什么?

比如我有

boost::dynamic_bitset<> test1( std::string("1111") );
boost::dynamic_bitset<> test2( std::string("00") );
Run Code Online (Sandbox Code Playgroud)

它们应该连接成一个thrid Bitset test3然后保存

111100 
Run Code Online (Sandbox Code Playgroud)

解决方案应该使用boost :: dynamic_bitset.如果解决方案适用于std :: bitset,那也会很好.在连接位时应该关注性能.

更新:我比较了两种方法(来自我和Neil的字体方法以及来自信使的shift方法)和字符串方法更快(因子10 ++).代码在这里:http: //pastebin.com/HfpfYfy8

我希望Pastebin可以发布长代码清单.如果有更好的方法请与我联系.

c++ boost std bitset

8
推荐指数
2
解决办法
8186
查看次数

算法:从字符串创建颜色

我想从给定的字符串创建一种颜色.字符串不必与任何形式的结果颜色相关,但相同的字符串应始终产生相同的颜色.

这个问题不受特定编程语言的约束,因此"颜色"应该采用与RGB无关的语言格式.

如果算法在宽色谱中创建颜色而不仅仅是灰色,那将是很好的.

完全是这样的(C++):

#include <string>

int getRedFromString( std::string givenString )
{ /*Your code here...*/ }

int getGreenFromString( std::string givenString )
{ /*Your code here...*/ }

int getBlueFromString( std::string givenString )
{ /*Your code here...*/ }

int main()
{
    std::string colorString = "FooBar";
    int R = getRedFromString  ( colorString );
    int G = getGreenFromString( colorString );
    int B = getBlueFromString ( colorString );
}
Run Code Online (Sandbox Code Playgroud)

algorithm colors

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

HTML + CSS:将类/ id添加到简单文本中

我目前陷入了一个可能非常微不足道的问题:

我有一个带有文本的简单HTML/CSS页面:

<head></head>
<body>
    This is a Text about Foobar.
</body>
Run Code Online (Sandbox Code Playgroud)

如何在Text不破坏格式的情况下为单词分配CSS类/ id ?假设我想将类添加.yellow到它,它显示黄色背景的文本.

我觉得我有一些东西挡住了我的脑海,因为它不会那么困难......但是我所有的google(大多数都是琐碎的教程)都只使用CSS,就像普通的HTML元素一样,<p>或者<b>会破坏我的格式.

html css

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

在Enterprise Architect中使用C++ STL

如何在Enterprise Architect中使用部分C++ STL?
能够将某些类属性指定为std::string或使用std::auto_ptr(或甚至std::tr1::shared_ptr)作为类型将是很好的.

另一个有趣的事情是怎样一个能够整合容器类型,如std::vectorstd::map成EA.

c++ uml stl std enterprise-architect

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