8
나는 전문화 다음과 같은 템플릿 기능이 있습니다 변환 할 수있는 방법이 있나요매개 변수 팩의 각 요소에 기능을 적용
template<typename ... Args>
void doSomething(Args ... args) {
// Convert parameter pack using convert function above
// and call any other variadic templated function with
// the converted args.
}
:
// Pass the argument through ...
template<typename T, typename U=T>
U convert(T&& t) {
return std::forward<T>(t);
}
// ... but convert std::strings
const char* convert(std::string s) {
return s.c_str();
}
을 나는 다음과 같은 가변 인자 템플릿 함수가있는 경우 코멘트에서와 같이 convert 함수를 사용하는 매개 변수 팩?
내 원래의 목표는 문자열에서 .c_str()을 수동으로 호출 할 필요없이 printf와 같은 함수에서 '% s'에 std :: string을 전달할 수 있다는 것이 었습니다. 그러나 이것이 간단한 방법으로 수행 될 수 있다면 나는 또한 일반에 관심이있다. 나의 시도는 지금까지 실패했다. something(convert(args)...)
가 확장되는 parameter pack expansion입니다
btw,'doSomething'은 전달 참조를 허용하지 않는 반면,'convert'는 전달 참조를 받아들입니다. 또한'convert (std :: string)'는 매달려있는 포인터를 반환합니다. 그래서 몇 가지 변경을 원할 수 있습니다. – StoryTeller
@StoryTeller 만약 내가 그것을 인쇄하고 싶다고 제안했다면 나는 포인터를 가지고 있어도 괜찮을 것이라고 생각한다. – Zitrax
's'가 변환 할 로컬입니다. 어떻게 괜찮을까요? – StoryTeller