通用程式設計能力訓練 template

2021-08-25 00:12:23 字數 2387 閱讀 4113

目的: 寫一套操作攝像機的操作, 與具體引擎無關。

其中使用到了今天剛看的 template 相關重點。

non-const-getter macros, 為了少些**

#ifndef _constgeterhelper_h_ #define _constgeterhelper_h_ #define non_const_getter(classtype, returntype, constgetter)\ returntype constgetter() #define non_const_getter1(classtype, returntype, constgetter,paramtype1)\ returntype constgetter(paramtype1 param1) #define non_const_getter2(classtype, returntype, constgetter, paramtype1, paramtype2)\ returntype constgetter(paramtype1 param1, paramtype2 param2) #define non_const_getter3(classtype, returntype, constgetter, paramtype1, paramtype2, paramtype3)\ returntype constgetter(paramtype1 param1, paramtype2 param2, paramtype3 param3) #endif

抽象 camera, 其中的 namespace 名稱是女朋友提的:)

#pragma once #include "constgeterhelper.h" namespace sakula ; templateclass cameraadaptort : public cameraadaptorimpl ; ~cameraadaptort() ; public: using typename cameraadaptorimpl::getposition; non_const_getter( cameraadaptort, vector3type, getposition); vector3type getposition() const void setposition(const vector3type& v) using typename cameraadaptorimpl::setorientation; non_const_getter( cameraadaptort, quaterniontype, getorientation); quaterniontype getorientation() const void setorientation(const quaterniontype& v) using typename cameraadaptorimpl::destroycamera; void destroycamera() protected: customcameratype* camera; }; }

基於 ogrecamera 的實現版本

ogrecameraadaptor.h

#pragma once namespace ogre ; #include "adaptort\cameraadaptort.h" namespace sakula ; }

ogrecameraadaptor.cpp

#include "stdafx.h" #include "ogrecameraadaptor.h" #include "ogrevector3.h" #include "ogrequaternion.h" #include "ogrecamera.h" #include "ogrescenemanager.h" sakula::ogrecameraadaptor::ogrecameraadaptor(ogre::camera* c) :ogrecameraadaptorbase(c) sakula::ogrecameraadaptor::~ogrecameraadaptor() sakula::ogrecameraadaptor::vector3type sakula::ogrecameraadaptor::getposition()const void sakula::ogrecameraadaptor::setposition( const vector3type& pos) sakula::ogrecameraadaptor::quaterniontype sakula::ogrecameraadaptor::getorientation()const void sakula::ogrecameraadaptor::setorientation(const quaterniontype& quat) void sakula::ogrecameraadaptor::destroycamera()

當然,這裡沒有對 vector3 和 quaternion 做適配介面, 實際上我是寫了的, 因為各家的 vector3 和 quaternion 都不盡相同。計算函式也不一樣,所以需要更多的提煉,慢慢寫吧,希望年前能寫一套比較完善的攝像機操作。

通用程式設計能力訓練 發布 訂閱模式

發布 訂閱模式核心 練習 實現以下參與者 eventobject 事件物件,用於引數傳遞 eventsource 事件源,用於觸發事件 subscribertemplate 訂閱器模板,儲存客戶 特殊需求 採用模板實現可定製的客戶 心得 1 為了在 subscribertemplate 層面使 in...

通用程式設計能力訓練 發布 訂閱模式

發布 訂閱模式核心 練習 實現以下參與者 eventobject 事件物件,用於引數傳遞 eventsource 事件源,用於觸發事件 subscribertemplate 訂閱器模板,儲存客戶 特殊需求 採用模板實現可定製的客戶 心得 1 為了在 subscribertemplate 層面使inv...

能力訓練之應變能力訓練

應變能力分為不同方面加以訓練。一.聽知覺能力訓練。聽知覺主要是通過耳朵採集訊息。聽得懂記得住,反應快。聽知覺能力差的人聽別人說話,聽完就忘,有時還反應不過來。能聽見說啥,就是聽不懂話,或者反應好久才能反應過來。大大影響應變能力。通過幾種練習可以提公升聽知覺能力。1.聽聲音辨別方向。將手機藏起來,然後...