Why...would anyone want to do that? The whole point of OOP is to hide
details so as to allow programmers to concentrate on one thing at a time
(while giving us the bonus of modular, reusable, easily maintainable code).
Why would you want/need to unhide details?


On Fri, Jun 14, 2013 at 2:59 AM, Maxthon Chan <xcvi...@me.com> wrote:

> Copied from Xcode and Mail saved all formatting from code highlighting as
> RTF. The code boilerplate is what I always use as a start point of my code.
> It makes it possible to expose some Objective-C code as plain C/C++ as I
> did in CGIKit 5, and it detects compiler. I have a newer version that does
> easy string constant too.
>
> Sent from my iPhone
>
> On 2013年6月14日, at 13:51, Jamie Ramone <sancom...@gmail.com> wrote:
>
> Colorful text is colorful! So what is this "boilerplate" thing exactly?
> I've heard the expression before but not quite sure what it refers to.
>
>
> On Wed, Jun 12, 2013 at 12:25 PM, Maxthon Chan <xcvi...@me.com> wrote:
>
>> Do you guys have a boilerplate that you are very used to build code on
>> top of? I have one like this (sans include guard which depend on header
>> file name):
>>
>> #include <sys/cdefs.h>
>> #include <stdarg.h>
>> #include <stdint.h>
>> #include <stddef.h>
>> #include <sys/types.h>
>>
>> // Feature testers
>>
>> #ifndef __has_feature
>> #define __has_feature(x) 0
>> #endif
>>
>> #ifndef __has_builtin
>> #define __has_builtin(x) 0
>> #endif
>>
>> #ifndef __has_extension
>> #define __has_extension(x) 0
>> #endif
>>
>> #ifndef __has_attribute
>> #define __has_attribute(x) 0
>> #endif
>>
>> // __inline
>>
>> #if __has_attribute(always_inline)
>> #define __inline static inline __attribute__((always_inline))
>> #else // !__has_attribute(always_inline)
>> #define __inline static inline
>> #endif// __has_attribute(always_inline)
>>
>> // __restrict
>>
>> #ifndef __cplusplus
>> #ifndef __restrict
>> #if __STDC_VERSION__ >= 199901L
>> #define __restrict restrict
>> #else // __STDC_VERSION__ < 199901L
>> #define __restrict
>> #endif // __STDC_VERSION__ >= 199901L
>> #endif // !defined(__restrict)
>> #endif // !defined(__cplusplus)
>>
>> // noreturn (__noreturn and unreachable())
>>
>> #if __has_attribute(noreturn)
>> #define __noreturn __attribute__((noreturn))
>> #if __has_builtin(__builtin_unreachable)
>> #define unreachable() __builtin_unreachable()
>> #else // !__has_builtin(__builtin_unreachable)
>> #define unreachable() do {} while (0)
>> #endif // __has_builtin(unreachable)
>> #else // !__has_attribute(noreturn)
>> #define __noreturn
>> #define unreachable() do {} while (0)
>> #endif // __has_attribute(noreturn)
>>
>> // Deprecated/unavalible with messages
>>
>> #undef __deprecated
>> #undef __unavailable
>>
>> #if __has_attribute(deprecated)
>> #if __has_extension(attribute_deprecated_with_message)
>> #define __deprecated(_msg) __attribute__((deprecated(_msg)))
>> #else // !__has_extension(attribute_deprecated_with_message)
>> #define __deprecated(_msg) __attribute__((deprecated))
>> #endif // __has_extension(attribute_deprecated_with_message)
>> #else // !__has_attribute(deprecated)
>> #define __deprecated(_msg)
>> #endif // __has_attribute(deprecated)
>>
>> #if __has_attribute(unavailable)
>> #if __has_extension(attribute_unavailable_with_message)
>> #define __unavailable(_msg) __attribute__((unavailable(_msg)))
>> #else // !__has_extension(attribute_unavailable_with_message)
>> #define __unavailable(_msg) __attribute__((unavailable))
>> #endif // __has_extension(attribute_unavailable_with_message)
>> #else // !__has_attribute(unavailable)
>> #define __unavailable(_msg)
>> #endif // __has_attribute(unavailable)
>>
>> #if __has_extension(enumerator_attributes)
>> #define __e_deprecated(_msg) __deprecated(_msg)
>> #define __e_unavailable(_msg) __unavailable(_msg)
>> #else // !__has_extension(enumerator_attributes)
>> #define __e_deprecated(_msg)
>> #define __e_unavailable(_msg)
>> #endif // __has_extension(enumerator_attributes)
>>
>> // Format strings
>>
>> #if __has_attribute(format)
>> #define __format(...) __attribute__((format(__VA_ARGS__)))
>> #else // __has_attribute(format)
>> #define __format(...)
>> #endif
>>
>> // C-safe Objective-C type declaration
>>
>> #if defined(__OBJC__)
>> #import <Foundation/Foundation.h>
>> #define __class @class
>> #else // !defined(__OBJC__)
>> #include <objc/runtime.h>
>> #define __class typedef struct objc_object
>> #endif // defined(__OBJC__)
>>
>> // Objective-C instancetype
>>
>> #if defined(__OBJC__)
>> #if !__has_feature(objc_instancetype)
>> typedef id instancetype
>> #endif // !__has_feature(objc_instancetype)
>> #endif // defined(__OBJC__)
>>
>> // Enumerations
>>
>> #define __enum(_name, _type) enum _name : _type; enum _name
>>
>> // Some convenience Objective-C functions and macros
>>
>> __class NSString;
>> #define NSStringConstant(_name, _value) extern NSString *const _name;
>>
>> #if defined(__OBJC__)
>> __BEGIN_DECLS
>>
>> __inline __format(NSString, 1, 0) NSString *NSSTRv(NSString *format,
>> va_list args)
>> {
>>     NSString *string = [[NSString alloc] initWithFormat:format
>>                                               arguments:args];
>> #if !__has_feature(objc_arc) && !__has_feature(objc_gc)
>>     [string autorelease];
>> #endif
>>     return string;
>> }
>>
>> __inline __format(NSString, 1, 2) NSString *NSSTR(NSString *format, ...)
>> {
>>     va_list args;
>>     va_start(args, format);
>>     NSString *string = NSSTRv(format, args);
>>     va_end(args);
>>     return string;
>> }
>>
>> __END_DECLS
>> #endif // defined(__OBJC__)
>>
>>
>> _______________________________________________
>> Gnustep-dev mailing list
>> Gnustep-dev@gnu.org
>> https://lists.gnu.org/mailman/listinfo/gnustep-dev
>>
>>
>
>
> --
> Besos, abrazos, confeti y aplausos.
> Jamie Ramone
> "El Vikingo"
>
>


-- 
Besos, abrazos, confeti y aplausos.
Jamie Ramone
"El Vikingo"
_______________________________________________
Gnustep-dev mailing list
Gnustep-dev@gnu.org
https://lists.gnu.org/mailman/listinfo/gnustep-dev

Reply via email to