⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 callhandler.h

📁 AMOP 0.3 is an Automatic Mock Object for C++. By using ABI and template techniques, it can simulate
💻 H
字号:
#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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -