我不喜欢把魔术盒分散在我的代码中……这两个类如何工作,基本上允许任何函数映射到一个函数对象,即使函数<>具有完全不同的参数boost::bind 它甚至适用于不同的调用约定(即成员方法是VC下的__thiscall ,但对于那些需要与C兼容的“普通”函数通常是__cdecl或__stdcall 。
所以想象我们有2个函数(void : ( void ) )和(std::string : (int, std::string)) ,我们可以有10个函数。 所有(或其中一些)都采用不同的参数types,并可以返回不同的types。 我们想把它们存储在一个std::map ,所以我们得到了这样一个API: //Having a functions like: int hello_world(std::string name, const int & number ) { name += "!"; std::cout << "Hello, " << name << std::endl; return number; } //and void i_do_shadowed_stuff() { return; } //We want to be capable to create a map […]
寻找一些C ++库(比如boost :: program_options),它能够返回INI文件的行号,在这里find给定的选项或部分。 用例: 我要求图书馆在“[SSS]”部分find价值“vvv”。 库返回find“[SSS]”部分中的“vvv”的行号,或-1。 它使我有能力说“第55行:vvv必须<256”。 我迭代INI文件的部分和validation他们的名字。 当发现一些狂野的部分时,我会说:“第55行:[哈哈哈]部分是未知的”。 更新:我知道“INI比猛犸象年长”,但目前我必须将大型windows项目移植到跨平台,不能很快摆脱.ini文件。
以下代码导致cl.exe崩溃(MS VS2005)。 我正在尝试使用boost绑定来创build一个调用myclass方法的函数: #include "stdafx.h" #include <boost/function.hpp> #include <boost/bind.hpp> #include <functional> class myclass { public: void fun1() { printf("fun1()\n"); } void fun2(int i) { printf("fun2(%d)\n", i); } void testit() { boost::function<void ()> f1( boost::bind( &myclass::fun1, this ) ); boost::function<void (int)> f2( boost::bind( &myclass::fun2, this ) ); //fails f1(); f2(111); } }; int main(int argc, char* […]
这个问题的答案为什么不能在c ++ 0x模式下使用libc ++来链接这个boost :: program_options例子? 状态“你需要使用clang ++ -stdlib = libc ++来重buildboost。 我正在使用Mac OS Lion与叮当声V3.0。 如何使用clang构buildBoost v1.48.0并将其与libc ++链接? 更新:我创build了一个user-config.jam文件,内容如下: using clang-darwin …将用clang而不是gcc来构buildBoost。 如何链接libc ++而不是libstdc ++?
我有一个ini文件,其中包含一些示例值,如: [Section1] Value1 = 10 Value2 = a_text_string 我试图加载这些值,并用Boost在我的应用程序中打印它们,但我不明白如何在C ++中执行此操作。 我在这个论坛search,以find一些例子(我总是使用C,所以我不是很好的C + +),但我只发现如何从文件一次读取值的例子。 我需要加载一个单一的值,如string = Section1.Value2因为我不需要读取所有的值,但只是less数。 我想加载单个值并将其存储在variables中,以便在我的应用程序中使用它们。 Boost可以做到这一点吗? 目前,我正在使用这个代码: #include <iostream> #include <string> #include <set> #include <sstream> #include <exception> #include <fstream> #include <boost/config.hpp> #include <boost/program_options/detail/config_file.hpp> #include <boost/program_options/parsers.hpp> namespace pod = boost::program_options::detail; int main() { std::ifstream s("file.ini"); if(!s) { std::cerr<<"error"<<std::endl; return 1; } std::set<std::string> options; options.insert("Test.a"); […]
我正在尝试使用Boost库在Ubuntu 11.10上编译一个程序。 我安装了Ubuntu Repository的1.46-dev Boost库,但在编译程序时出现错误。 undefined reference to boost::system::system_category() 我做错了什么?
我有一个C ++ 03应用程序,其中std::vector<T>types被用作临时缓冲区。 因此,它们通常使用std::vector<T>::resize()来std::vector<T>::resize()以确保它们足够大,以便在使用前保存所需的数据。 这个函数的C ++ 03原型实际上是: void resize(size_type n, value_type val = value_type()); 所以实际上在调用resize() ,通过添加val的相应数量的副本来扩大向量。 但是,我经常需要知道vector足够大以容纳我需要的数据; 我不需要用任何值初始化它。 复制构build新值只是浪费时间。 C ++ 11来拯救(我认为):在其规范中,它将resize()分成两个重载: void resize(size_type n); // value initialization void resize(size_type n, const value_type &val); // initialization via copy 这很适合C ++的哲学:只为你想要的付出代价。 但是,正如我所指出的那样,我的应用程序不能使用C ++ 11,所以当我遇到Boost.Container库的时候,我很高兴,它在文档中指出了对这个function的支持 。 具体来说, boost::container::vector<T>实际上有三个resize()重载: void resize(size_type n); // value initialization void resize(size_type n, […]
在Boost Signals库中,它们正在重载()运算符。 这是C ++的惯例吗? 对于callback等? 我已经看到了一个同事的代码(谁是一个很大的助推器粉丝)。 在所有的提升善良中,这只会导致我的困惑。 任何有关这种超负荷的理由?
我需要执行一个程序,并在c ++中检索它的标准输出。 我想我的代码也是跨平台的。 最近刚刚发现了所有跨平台需求的Boost c ++库的精彩世界,我想我只是去boost.org并阅读Boost.Process的文档。 令我惊讶的是,它不在那里! 然后我继续弄清楚Boost给他们的跨平台库起了什么名字来启动外部进程,但还没有设法find它。 Googlesearch将我带到了Julio M. Merino Vidal的Boost.Process ,它似乎是我正在寻找的非官方Boost图书馆。 奇怪的是,我似乎无法find该网站上的下载链接。 这个项目似乎也没有任何近期的发展。 我终于能够在外部网站上findVidal的Boost.Process的下载链接,现在就可以使用它了,但是我非常惊讶于我必须付出努力才能把跨平台的c ++库与外部进程交互。 那么,为什么没有官方的Boost.Process呢? 这似乎是一个非常有价值的补充。 或者我完全忽略了这里的明显解决scheme? 你能不能build议其他跨平台的库pipe理简单的启动和与外部进程的交互?