add cpp version facade pattern