이 고려 호출는 조건 연산자는 두 개의 클래스 멤버 함수 사이를 전환하는 데 사용할 수 있습니다
int func1(int i);
int func2(int i);
조건부 연산자처럼 사용할 수 있습니다 모두 같은 매개 변수를 사용할 수있는 경우,
int res = (cond)?func1(4):func2(4);
또는 :
int res = ((cond)?func1:func2)(4);
이제 클래스의 멤버 함수에 대한 어떤 :
는 그 다음 해 드리겠습니다 어떤 것입니까 ... 아니 성공도 ((t.*((cond)?&(T::memfunc1):&(T::memfunc2)))()
) 다른 구문을 시도 ...
T t(4);
int res2 = t.((cond)?memfunc1:memfunc2)();
을 :
class T
{
public:
T(int i) : i(i) {}
int memfunc1() { return 1*i; }
int memfunc2() { return 2*i; }
private:
int i;
};
나는이 시도했지만 작동하지 않습니다 좋은 구문일까요? 한 줄의 코드 대답은 너무 쉬운 것입니다 함수에 대한 포인터를 저장하기 위해 임시 자동 변수를 사용하여 (바람직하다 ... ;-)
' (t –
@PiotrSkotnicki : 그것은 작동합니다, 나는 당신이 단지 내 시도에서 괄호를 제거해야만했다는 것을 믿을 수 없다. ;-)!! (cond? & T :: memfunc1 : & T :: memfunc2)! 칭찬을 받기 위해 답으로 게시하십시오. – jpo38
낡은'cond? memfunc1() : memfunc2()'? –