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 -----Original Message----- From: llvmdev-bounces at cs.uiuc.edu [mailto:llvmdev-bounces at cs.uiuc.edu] On Behalf Of Stepan Dyatkovskiy Sent: 16 February 2012 06:36 To: llvmdev at cs.uiuc.edu Subject: [LLVMdev] 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. _______________________________________________ LLVM Developers mailing list LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
Yup. I'm also inclined to the templates. Thanks. -Stepan. 16.02.2012, 13:49, "James Molloy" <james.molloy at arm.com>:> Hi, > > I think Chris recently did this with ArrayRef - that might be a good > template to base your solution on? > > Cheers, > > James > > -----Original Message----- > From: llvmdev-bounces at cs.uiuc.edu [mailto:llvmdev-bounces at cs.uiuc.edu] On > Behalf Of Stepan Dyatkovskiy > Sent: 16 February 2012 06:36 > To: llvmdev at cs.uiuc.edu > Subject: [LLVMdev] 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. > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev