在阅读问题之前:
这个问题不是关于它的使用有多大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真的表现不好吗?
根据测试结果,它没有.我的测试代码是否正确?
为什么这么多开发人员认为如果不是这么慢呢?
我目前正在寻找一种获取本地IP地址的便携方式.因为我正在使用Boost,我认为使用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) 我有以下类结构:
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)中实现的.有谁知道我的错在哪里?
我有一个客户端通过UDP广播发送数据.(比如说127.0.0.255:12345)
现在我想让多个服务器监听这些数据.要在本地计算机上执行此操作,他们需要共享端口12345以进行侦听.
我的问题是,如果可能,如果有任何不利之处,并且这种方法可能存在问题.
不幸的是,有一种替代方案会带来很多开销:
实现某种注册过程.在启动时,每个服务器都告诉客户端它的端口.客户端然后将消息发送到每个端口(必须多次发送数据,需要实现某种握手......)
你知道更好的替代方案吗?
如果重要:
我正在使用C++和Boost :: Asio.该软件应该是可移植的(主要是Linux和Windows).
我目前正在创建一个使用Boost :: Serialization的概念,它需要实现自己的Boost :: Archive,因为数据必须以某种方式被序列化.
有关于在文档中实现自定义存档的文档:http: //www.boost.org/doc/libs/1_44_0/libs/serialization/doc/index.html
但我很好奇网上任何地方是否有其他(reallife)示例.我找不到任何东西.也许有人可以指点我的来源或文章.
我目前看到很多标记为C++的问题,并且是关于处理数组的.
甚至还有一些问题会询问有关阵列的方法/功能,而这些问题std::vector可以提供没有任何魔力的.
所以我想知道为什么这么多开发人员std::vector在C++ 中选择数组呢?
连接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可以发布长代码清单.如果有更好的方法请与我联系.
我想从给定的字符串创建一种颜色.字符串不必与任何形式的结果颜色相关,但相同的字符串应始终产生相同的颜色.
这个问题不受特定编程语言的约束,因此"颜色"应该采用与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) 我目前陷入了一个可能非常微不足道的问题:
我有一个带有文本的简单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>会破坏我的格式.
如何在Enterprise Architect中使用部分C++ STL?
能够将某些类属性指定为std::string或使用std::auto_ptr(或甚至std::tr1::shared_ptr)作为类型将是很好的.
另一个有趣的事情是怎样一个能够整合容器类型,如std::vector和std::map成EA.
c++ ×7
boost ×2
std ×2
stl ×2
algorithm ×1
archive ×1
arrays ×1
bitset ×1
boost-asio ×1
coding-style ×1
colors ×1
css ×1
dynamic-cast ×1
html ×1
inheritance ×1
interface ×1
ip-address ×1
networking ×1
performance ×1
udp ×1
uml ×1
vector ×1