질문 제목이 정확한지 확실하지 않습니다 ... 원래의 간단한 시나리오를 설명하고 시작하여 무엇을하고 싶은지 설명하고, 그러나 할 수 없다.값 별 전달 형 다형성
이class Operand;
Operand genOperandA() { ...; return Operand(); }
Operand genOperandB() { ...; return Operand(); }
... // more operand-generation functions
typedef Operand (*OpGen)();
// Table of function pointers
static const OpGen generators[] =
{
genOperandA,
genOperandB,
...
};
// Function to do some operation on the operand
void operate(Operand& op);
...
// Example call
operate(generators[1]());
지금까지 너무 좋아 (내 생각) :
원래 내가 좋아하는 뭔가를했다. 그러나, 몇몇 유도 된 피연산자 유형이 존재한다. class RegisterOperand : public Operand
. 이상형으로 파생 된 유형의 인스턴스를 반환하는 새롭고 헌신적 인 genOperand
함수가 있습니다. 나는 참조 또는 포인터 형태를 돌려주는 것 인 경우에이 작동합니다 알고, 그래서 만, 그러나
RegisterOperand genOperandC() { ...; return RegisterOperand(); }
static const OpGen generators[] =
{
...
genOperandC,
};
:
Operand genOperandC() { ...; return RegisterOperand(); }
을 나는이 작업을 수행 할 수 없습니다 :하지만이 작업을 수행 할 수 없습니다 현재 가지고있는 옵션은 다음과 같습니다.
이제는 원래 필요하지 않은 명시 적 정리가 필요합니다.
내가 고려하지 않은 대안은 무엇입니까?
공유 포인터를 직접 생성하는 대신에 boost :: make_shared를 사용하면 간단한 래퍼 메소드이지만 필요한 메모리 할당 횟수가 줄어 듭니다 (따라서 더 빠릅니다) –