callhandler.h

来自「AMOP 0.3 is an Automatic Mock Object for」· C头文件 代码 · 共 66 行

H
66
字号
#ifndef __AMOP_CALLHANDLER_HH
#define __AMOP_CALLHANDLER_HH

#include "Config.h"
#include "VirtualTable.h"
#include "FunctionHolder.h"

namespace amop
{

namespace Detail
{

struct CallHandler
{
	template <int I>
	struct SelectID
	{
		template <class T>
		struct Get
		{	
			static void* Select(T method, size_t offset)
			{			
				if(I == offset)
					return HorribleCast<void*>(&FunctionHolder<I,T>::Func);
				else
					return SelectID<I+1>::Get<T>::Select(method, offset);
			}
		};
	};

	template <>
	struct SelectID<MAX_NUM_VIRTUAL_FUNCTIONS>
	{
		template <class T>
		struct Get
		{		
			static void* Select(T method, size_t offset)
			{
				return 0;
			}
		};
	};
	
	template <class T>
	static void* Select(T method, 
		size_t offset)
	{
		return SelectID<0>::Get<T>::Select(method, offset);
	}

	template<class T>
	static void* Create(T method, size_t offset)
	{
		void* result = Select(method, offset);
		assert(result);
		
		return result;
	}
};

}

}

#endif //__AMOP_CALLHANDLER_HH

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?