假设,我有一个恒定数量的集合(例如3个ArrayLists)作为类的成员.现在,我想将所有元素公开给其他类,以便它们可以简单地遍历所有元素(理想情况下,只读).我正在使用guava集合,我想知道如何使用guava iterables/iterators来生成内部集合的逻辑视图,而无需制作临时副本.
我有一个工作的记录器类,它将一些文本输出到richtextbox(Win32,C++).问题是,我总是这样使用它:
stringstream ss;
ss << someInt << someString;
debugLogger.log(ss.str());
Run Code Online (Sandbox Code Playgroud)
相反,像流一样使用它会更方便:
debugLogger << someInt << someString;
Run Code Online (Sandbox Code Playgroud)
有没有比将内容转发到内部stringstream实例更好的方法?如果这样做,我什么时候需要冲洗?
我正在寻找一些很好的教程,让我开始进行演示编码.我有一些CG的背景,但这都是理论上的.
有很多常规的3D编程教程,但我特别想找一些旧学校的2D东西.
假设我有一些构建exe或dll文件的C++项目.该项目被检入SVN存储库.我想自动将SVN的修订版本与我的exe/dll文件中嵌入的版本资源同步,即版本应该是$ major.$ minor.$ svn_revision.
关于如何实现这一点的任何想法?有没有开箱即用的解决方案?
我有一个类,我想要公开一个结构列表(它只包含一些整数).我不希望外部修改这些数据,只是迭代它并读取它们示例:
struct TestData
{
int x;
int y;
// other data as well
}
class IterableTest
{
public:
// expose TestData here
};
Run Code Online (Sandbox Code Playgroud)
现在在我的代码中我想像我这样使用我的类:
IterableTest test;
BOOST_FOREACH(const TestData& data, test.data())
{
// do something with data
}
Run Code Online (Sandbox Code Playgroud)
我已经阅读了这篇关于成员空间的文章http://accu.org/index.php/journals/1527.但是,我不想(或不能)将所有TestData保存在内部向量中.这是因为类本身并不拥有存储,即实际上没有可以由类直接访问的底层容器.但是,类本身可以查询外部组件以获取next,previous或iith元素.
所以基本上我希望我的班级表现得好像它有一个集合,但事实上它没有一个.有任何想法吗?
我正在使用c ++开发一个小型Windows应用程序,我想在PC上获得某种软件/硬件指纹,以便我可以允许该应用程序仅在某些PC上运行.
我知道应用程序可以破解,但我真的很有兴趣实现这样的东西.
任何想法我怎么能实现这一目标?
在boost::log进入官方 boost 库之前(从 1.54 开始),我使用的是带有以下代码的sourceforge 版本:
boost::log::formatters::fmt_format<char> simpleFormat(
boost::log::formatters::format("%1% %2%") %
boost::log::formatters::date_time<boost::posix_time::ptime>(
"TimeStamp", boost::log::keywords::format = "%H:%M:%S") %
boost::log::formatters::message());
Run Code Online (Sandbox Code Playgroud)
后来:
log_sink->locked_backend()->set_formatter(simpleFormat)
Run Code Online (Sandbox Code Playgroud)
但是,我根本无法弄清楚如何在不使用流语法的情况下使用新boost::logAPI表达上述日志记录格式(我想坚持上述格式样式语法)。有任何想法吗?
更新:这是我得到的编译器错误(使用 gcc 4.6.3):
> boost/boost/log/expressions/formatters/date_time.hpp: In constructor
> ‘boost::log::v2s_mt_posix::expressions::format_date_time_terminal<T,
> FallbackPolicyT, CharT>::format_date_time_terminal(const
> boost::log::v2s_mt_posix::attribute_name&, const fallback_policy&,
> const string_type&) [with T = boost::posix_time::ptime,
> FallbackPolicyT = boost::log::v2s_mt_posix::fallback_to_none, CharT =
> char,
> boost::log::v2s_mt_posix::expressions::format_date_time_terminal<T,
> FallbackPolicyT, CharT>::fallback_policy =
> boost::log::v2s_mt_posix::fallback_to_none,
> boost::log::v2s_mt_posix::expressions::format_date_time_terminal<T,
> FallbackPolicyT, CharT>::string_type = std::basic_string<char>]’:
> /boost/boost/log/expressions/formatters/date_time.hpp:229:94: …Run Code Online (Sandbox Code Playgroud) 请考虑以下代码:
typedef vector<int> intVec;
intVec& operator<<(intVec& dst, const int i) {
dst.push_back(i);
return dst;
}
int intResult0() {
return 23;
}
int intResult1() {
return 42;
}
// main
intVec v;
v << intResult0() << intResult1();
Run Code Online (Sandbox Code Playgroud)
奇怪的是,编译器生成代码,该代码评估intResult1 BEFORE intResult0(使用最新的VC和gcc进行测试).为什么编译器会这样做?通过这样做,评估和使用各个值之间的时间(不必要地)增加(α),即首先获取42,但最后推送到矢量.C++标准是否规定了这一点?
我有以下宏来定义一个特殊命名方案后的新函数:
#define CREATE_HOOK_STUB( func ) void ##func_STUB() { /* some code*/ }
Run Code Online (Sandbox Code Playgroud)
但是,预处理器始终连接void,##func_STUB但我显然希望它保留该位置的空白.
我知道我可以在前面添加一些字符串##func_STUB,但这不是我想要的.我该如何解决这个问题?