각기 다른 기본 형식 (int, float, bool, string)이 될 수있는 다양한 수의 인수를 사용하는 콘솔 명령을 설정하고 다른 번호를 지원하기 위해 8 개의 오버로드가있는 함수로 전달합니다 다양한 타입의 인자들. 명령 행 문자열을 유형에 따라 값으로 파싱 한 다음 함수에 전달하는 방법은 무엇입니까?가변 수와 유형의 인수를 템플릿 함수에 전달하는 방법은 무엇입니까?
const char* GetArg(int index)
함수를 통해 각 인수를 검색 할 수 있습니다. char*
을 적절한 유형으로 변환하는 것은 문제가 아니므로 해당 부분에 대해 걱정할 필요가 없습니다. 값을 저장하고 어떻게 든 템플릿 함수에 전달하는 것은 내가 붙어있는 부분입니다.
예를 들어, 명령은 다음과 같은 문자열로 실행 된 경우 : "명령 66 진정한 5"문자열 값 "0.56"
그것은 다음 인수로 분해 될 어떻게 든 저장 것이다:
int arg1 = GetArg(1); // 66
bool arg2 = GetArg(2); // true
int arg3 = GetArg(3); // 5
char* arg4 = GetArg(4); // "string value"
float arg5 = GetArg(5); // 0.56
// The function definition looks something like this:
void SomeFunc();
template<typename T1>
void SomeFunc(const T1& arg1);
template<typename T1, typename T2>
void SomeFunc(const T1& arg1, const T2& arg2);
// etc...
// And then somehow it would be called. This is just an example. I don't
// know how to call it in a way that would work with variable number and
// type of args.
switch (argCount)
{
case 0:
SomeFunc();
break;
case 1:
SomeFunc(arg1);
break;
case 2:
SomeFunc(arg1, arg2);
break;
case 3:
SomeFunc(arg1, arg2, arg3);
break;
case 4:
SomeFunc(arg1, arg2, arg3, arg4);
break;
case 5:
SomeFunc(arg1, arg2, arg3, arg4, arg5);
break;
}
방법이 가능 할 것입니다 : 인수의 수에 따라 다음
그리고, 올바른 템플릿 함수를 호출? 각 인수의 유형을 알 수 있도록 템플릿 함수에 전달할 수있는 방법으로 args를 저장하는 것은 가능하지 않지만 나는 단지 무언가를 생각하고 있지 않은 것처럼 느낍니다.
이 인터페이스도 변경할 수 없습니다. 이것은 제가 다루어야 할 제 3의 기능입니다. 따라서 구현 방법에 관계없이 결국에는 SomeFunc()
을 통과해야합니다.
중요 : Visual Studio 2012에서이 작업을 수행하므로 새로운 C++ 기능으로 제한됩니다. C++ 11을 조금이라도 할 수는 있지만 그게 전부입니다. 프로젝트를 최신 버전으로 업그레이드하려고하지만 당장은 그 문제를 해결해야합니다.
컴파일 타임 및 런타임 로직을 혼합하려는 것처럼 들립니다. 템플릿은 컴파일 시간이며 컴파일 타임에 매개 변수의 수와 유형을 알아야합니다. 그것은 정말로 당신이 성취하고자하는 다른 것입니까? –
튜플을 만들 수 있다면 [this] (https://stackoverflow.com/questions/7858817/unpacking-a-tuple-to-call-a-matching-function-pointer)를 사용하여 튜플을 전환 할 수 있습니다 함수 호출. – NathanOliver
@TommyAndersen 소리가 정확합니다. 나는 그 주위에 어떤 방법도 없다. 나는 이벤트를 쉽게 트리거하기위한 도우미 콘솔 명령을 만들려고 노력하고있다. 각 이벤트마다 다양한 수의 args 및 유형을 가질 수있다. 이 문제가 해결되지 않으면 아이디어가 나온 것 같아 보일 것입니다. – Shenjoku