후속 : 나는 boost::format
와 문자열의 형식을 람다를 사용하는 함수를 만드는 boost::function
를 사용하기 위해 노력하고있어 Using * Width & Precision Specifiers With boost::format부스트 : : 기능 및 부스트 : : 람다 게시물에 다시
. 궁극적으로 무엇을 달성하기 위해 노력하고있다 형식으로 문자열에 대한 & 정밀도 지정자를 사용하고 있습니다. in the docs를 나타낸 바와 boost::format
는 *
폭 & 정밀도 지시자의 사용을 지원하지 않습니다
그래서 같은 목표를 달성 할 수있는 다른 방법을 찾기 위해 노력하고있어.폭 별표로 설정 정밀도 (*) 는 인수로부터이 분야 를 읽을의 printf 의해 사용된다. 예 : printf ("% 1 $ d : % 2 $. * 3 $ d : % 4 $. * 3 $ d \ n", 시, 분, 초, 초); 이 클래스 은 에 대해이 메커니즘을 지원하지 않습니다. 그러한 정밀도 또는 폭 필드 은 파싱에 의해 조용히 무시됩니다.
#include <string>
#include <boost\function.hpp>
#include <boost\lambda\lambda.hpp>
#include <iostream>
#include <boost\format.hpp>
#include <iomanip>
#include <boost\bind.hpp>
int main()
{
using namespace boost::lambda;
using namespace std;
boost::function<std::string(int, std::string)> f =
(boost::format("%s") % boost::io::group(setw(_1*2), setprecision(_2*2), _3)).str();
std::string s = (boost::format("%s") % f(15, "Hello")).str();
return 0;
}
이 많은 컴파일러 오류를 생성합니다 : 부스트의 람다 및 기능
1>------ Build started: Project: hacks, Configuration: Debug x64 ------
1>Compiling...
1>main.cpp
1>.\main.cpp(15) : error C2872: '_1' : ambiguous symbol
1> could be 'D:\Program Files (x86)\boost\boost_1_42\boost/lambda/core.hpp(69) : boost::lambda::placeholder1_type &boost::lambda::`anonymous-namespace'::_1'
1> or 'D:\Program Files (x86)\boost\boost_1_42\boost/bind/placeholders.hpp(43) : boost::arg<I> `anonymous-namespace'::_1'
1> with
1> [
1> I=1
1> ]
1>.\main.cpp(15) : error C2664: 'std::setw' : cannot convert parameter 1 from 'boost::lambda::placeholder1_type' to 'std::streamsize'
1> No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
1>.\main.cpp(15) : error C2872: '_2' : ambiguous symbol
1> could be 'D:\Program Files (x86)\boost\boost_1_42\boost/lambda/core.hpp(70) : boost::lambda::placeholder2_type &boost::lambda::`anonymous-namespace'::_2'
1> or 'D:\Program Files (x86)\boost\boost_1_42\boost/bind/placeholders.hpp(44) : boost::arg<I> `anonymous-namespace'::_2'
1> with
1> [
1> I=2
1> ]
1>.\main.cpp(15) : error C2664: 'std::setprecision' : cannot convert parameter 1 from 'boost::lambda::placeholder2_type' to 'std::streamsize'
1> No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
1>.\main.cpp(15) : error C2872: '_3' : ambiguous symbol
1> could be 'D:\Program Files (x86)\boost\boost_1_42\boost/lambda/core.hpp(71) : boost::lambda::placeholder3_type &boost::lambda::`anonymous-namespace'::_3'
1> or 'D:\Program Files (x86)\boost\boost_1_42\boost/bind/placeholders.hpp(45) : boost::arg<I> `anonymous-namespace'::_3'
1> with
1> [
1> I=3
1> ]
1>.\main.cpp(15) : error C2660: 'boost::io::group' : function does not take 3 arguments
1>.\main.cpp(15) : error C2228: left of '.str' must have class/struct/union
1>Build log was saved at "file://c:\Users\john\Documents\Visual Studio 2005\Projects\hacks\x64\Debug\BuildLog.htm"
1>hacks - 7 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
내 기본적인 이해는 아마 부족한 여기
내가 작동하지 않는, 지금까지 가지고있는 것입니다. 어떻게 작동시킬 수 있습니까?