У меня есть ряд классов для этой точной вещи, которую я использую в своей платформе C++.
http://code.google.com/p/kgui/source/browse/trunk/kgui.h
, Как я обрабатываю его, является каждой функцией класса, которая может использоваться в качестве потребностей обратного вызова статическая функция, которая связывает тип объекта с ним. У меня есть ряд макросов, которые делают это автоматически. Это делает статическую функцию с тем же именем кроме с "CB _" префикс и дополнительный первый параметр, который является указателем объекта класса.
Контроль Типы классов kGUICallBack и различные шаблонные версии этого для обработки различных комбинаций параметров.
#define CALLBACKGLUE(classname , func) static void CB_ ## func(void *obj) {static_cast< classname *>(obj)->func();}
#define CALLBACKGLUEPTR(classname , func, type) static void CB_ ## func(void *obj,type *name) {static_cast< classname *>(obj)->func(name);}
#define CALLBACKGLUEPTRPTR(classname , func, type,type2) static void CB_ ## func(void *obj,type *name,type2 *name2) {static_cast< classname *>(obj)->func(name,name2);}
#define CALLBACKGLUEPTRPTRPTR(classname , func, type,type2,type3) static void CB_ ## func(void *obj,type *name,type2 *name2,type3 *name3) {static_cast< classname *>(obj)->func(name,name2,name3);}
#define CALLBACKGLUEVAL(classname , func, type) static void CB_ ## func(void *obj,type val) {static_cast< classname *>(obj)->func(val);}
PHP
решение:
function hasDecimals($x)
{
return floatval($x) - intval($x) != 0;
}
В Scala можно использовать isWhole()
или isValidInt()
, чтобы проверить, не имеет ли число никакой дробной части:
object Example {
def main(args: Array[String]) = {
val hasDecimals = 3.14.isWhole //false
val hasDecimals = 3.14.isValidInt//false
}
}