Question about "const"

Hi all. I have a next problem. I need to implement some object that will work with both const and "constless" object: Instruction* and const Instruction*, for example.
How to implement it better?
Currently I see two possible ways:

1. Templates.
template <class InstructionTy>
class InstructionProcessorT {
  InstructionTy *Inst;
  InstructionProcessor(InstructionTy *I) : Inst(I) {}
  //
};
typedef InstructionProcessorT<Instruction> InstructionProcessor;
typedef InstructionProcessorT<const Instruction> ConstInstructionProcessor;

2. Unions.
class InstructionProcessor {
  union {
    const Instruction *ConstInst;
    Instruction *Inst;
  }
  InstructionProcessor(Instruction *I) : Inst(I) {}
  InstructionProcessor(const Instruction *I) : ConstInst(I) {}
  
  void someMethod(); // Will work with Inst.
  void someMethod() const; // Will work with ConstInst.
};

Any suggestions?

Thanks!
-Stepan.

Hi,

I think Chris recently did this with ArrayRef - that might be a good
template to base your solution on?

Cheers,

James

Yup. I'm also inclined to the templates. Thanks.

-Stepan.