假设您的C++编译器支持它们,是否有任何特殊原因不使用__FILE__,__LINE__以及__FUNCTION__用于记录和调试目的?
我主要关注的是为用户提供误导性数据 - 例如,由于优化而报告错误的行号或功能,或者因此导致性能下降.
基本上,我可以信任__FILE__,__LINE__并__FUNCTION__以永远做正确的事?
举例说明,为了这个问题:
void MyClass::MyFunction( int x ) const
{
std::cout << m_map[x] << std::endl
}
Run Code Online (Sandbox Code Playgroud)
这不会编译,因为[]运算符是非const的.
这很不幸,因为[]语法看起来很干净.相反,我必须做这样的事情:
void MyClass::MyFunction( int x ) const
{
MyMap iter = m_map.find(x);
std::cout << iter->second << std::endl
}
Run Code Online (Sandbox Code Playgroud)
这一直困扰着我.为什么[]运算符是非常量的?
我有两张桌子:玩具和游戏.
+--------------------+------------------+
| Field | Type |
+--------------------+------------------+
| toy_id | int(10) unsigned |
| little_kid_id | int(10) unsigned |
+--------------------+------------------+
+--------------------+------------------+
| Field | Type |
+--------------------+------------------+
| game_id | int(10) unsigned |
| little_kid1 | int(10) unsigned |
| little_kid2 | int(10) unsigned |
| little_kid3 | int(10) unsigned |
+--------------------+------------------+
Run Code Online (Sandbox Code Playgroud)
一个小孩可以有多个玩具.一个小孩可以同时参加多个游戏.
我想要一个查询,它会给我一个little_kid所涉及的玩具+游戏的总数.
基本上,我想要这两个查询的总和:
SELECT COUNT(*) FROM Toys WHERE little_kid_id = 900;
SELECT COUNT(*) from Games WHERE little_kid1 = 900
OR little_kid2 = 900
OR little_kid3 = 900; … 我现在一直在使用手动构造函数注入DI.我注意到的一件事是我的构造函数开始变得相当长.
我有一个类依赖于一堆小物体 - 有时候在6到10之间.随着我继续将我的应用程序分解为更小的块,我可以看到这个数字随着时间的推移而增加.这是个常见的问题吗?
显然,这将取决于该项目.但是,基本问题是:
你什么时候开始对一个类的依赖数量感到不舒服?您使用哪些策略来减少这些依赖性?
我最近开始使用lcov来可视化我的代码覆盖率.这是一个很棒的工具.
我注意到的一件事是它为我正在使用的所有文件生成代码覆盖率报告 - 包括那些我不感兴趣的文件.例如,它将为我提供boost和mysql ++文件的代码覆盖率报告.
是否有一种简单的方法可以强制lcov仅生成特定文件的覆盖率报告?
我试过像这样使用-k参数:
/usr/bin/lcov -q -c -i -b . -d .obj -k src/ -k include/ -o app_base.info
{run unit tests now}
/usr/bin/lcov -q -c -b . -d .obj -k src/ -k include/ -o app_test.info
/usr/bin/lcov -q -a app_base.info -a app_test.info -o app_total.info
/usr/bin/genhtml -q -o lcov_output_directory app_total.info
(这意味着我只想要"include"和"src"目录的覆盖文件.)
但是,这似乎不起作用.该报告仍然显示了所有无关的文件.任何建议都非常感谢.谢谢!
我想使用循环列表.
没有实施我自己(像这个人一样)我的选择是什么?
具体来说,我想做的是迭代一个对象列表.当我的迭代器到达列表的末尾时,它应该自动返回到开头.(是的,我意识到这可能很危险.)
请参阅Vladimir对a的定义circular_iterator:"circular_iterator永远不会与CircularList :: end()相等,因此您始终可以取消引用此迭代器."
我有一个如下所示的数据结构:
typedef struct
{
unsigned short m_short1;
unsigned short m_short2;
unsigned char m_character;
} MyDataType;
我想使用boost :: serialization序列化这个数据结构,然后使用boost :: asio通过TCP/IP传输它,然后让另一个应用程序接收数据并使用相同的boost库对其进行反序列化.
我正在尝试关注boost :: serialization教程,(正如其他一些SO问题所示),但该示例专门用于写入/读取文件,而不是使用boost :: asio的套接字.
我很确定我有适合这项工作的工具 - 我只是需要帮助才能让它们协同工作.写入套接字与写入文件不同,对吧?
任何建议都非常感谢.谢谢!
这是一个相当基本的问题,但它是一个让我误解了一段时间的问题.
我的项目有一堆.cpp(实现)和.hpp(定义)文件.
我发现当我添加其他类和更多类的相互依赖时,我必须#include其他头文件.一两个星期之后,我最终在很多地方使用了#include指令.稍后,我会尝试删除一些#includes并发现一切仍然有效,因为其他包含的类也包括#include我刚删除的内容.
是否有一个简单,容易的规则来放入#includes,这将阻止这个丑陋的混乱发生在一开始?什么是最佳做法?
例如,我参与了一个项目,其中Implementation .cpp文件只包含相应的Definition .hpp文件,而没有其他任何内容.如果Implementation .cpp需要使用任何其他.hpp文件,则它们都由Definition .hpp文件引用.
我有一组多态对象,都来自我的Animal类:Cat,Dog和MonkeyFish.
我通常的操作模式是将这些对象存储在Animal指针的向量中,如下所示:
std :: vector <Animal*> my_vector;
my_vector.push_back( new Animal_Cat() ); my_vector.push_back( new Animal_Dog() ); my_vector.push_back( new Animal_MonkeyFish() );
生活很美好......或者是它?
我最近被告知我应该尽量避免以这种方式分配内存,因为它使内存管理成为一件苦差事.当我需要销毁my_vector时,我必须遍历所有元素并删除所有内容.
我不认为我可以存储引用的向量(我可能错了),所以看起来存储Animal对象的向量是我唯一的选择.
我什么时候应该选择使用指针向量与对象向量?一般来说,哪种方法更可取?(我想尽可能减少对象复制.)
我正在尝试交叉编译一些替代架构的应用程序.
我的典型程序如下:
这按预期工作:我的应用程序安装在/ var/install中.
但是,当我将此应用程序部署到我的替代架构时,我不希望它部署在/ var/install中.我只是希望它/正常安装.
我可以将其复制到/中,但是应用程序本身仍在尝试查看/ var/install中的各种默认设置.
我想在我的x86系统上编译和安装该软件,但是当我在备用架构上部署它时,我希望它就像我将它安装到/中,而不是在/ var/install中.
有没有办法完成我想要做的事情?