PixelLightAPI  .
FuncConstructor.h
Go to the documentation of this file.
00001 /*********************************************************\
00002  *  File: FuncConstructor.h                              *
00003  *
00004  *  Copyright (C) 2002-2012 The PixelLight Team (http://www.pixellight.org/)
00005  *
00006  *  This file is part of PixelLight.
00007  *
00008  *  PixelLight is free software: you can redistribute it and/or modify
00009  *  it under the terms of the GNU Lesser General Public License as published by
00010  *  the Free Software Foundation, either version 3 of the License, or
00011  *  (at your option) any later version.
00012  *
00013  *  PixelLight is distributed in the hope that it will be useful,
00014  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00015  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
00016  *  GNU Lesser General Public License for more details.
00017  *
00018  *  You should have received a copy of the GNU Lesser General Public License
00019  *  along with PixelLight. If not, see <http://www.gnu.org/licenses/>.
00020 \*********************************************************/
00021 
00022 
00023 #ifndef __PLCORE_FUNC_CONSTRUCTOR_H__
00024 #define __PLCORE_FUNC_CONSTRUCTOR_H__
00025 #pragma once
00026 
00027 
00028 //[-------------------------------------------------------]
00029 //[ Includes                                              ]
00030 //[-------------------------------------------------------]
00031 #include "PLCore/Base/Func/Func.h"
00032 
00033 
00034 //[-------------------------------------------------------]
00035 //[ Namespace                                             ]
00036 //[-------------------------------------------------------]
00037 namespace PLCore {
00038 
00039 
00040 //[-------------------------------------------------------]
00041 //[ Classes                                               ]
00042 //[-------------------------------------------------------]
00043 /**
00044 *  @brief
00045 *    Functoid that creates an object
00046 *
00047 *  @remarks
00048 *    Implementation for up to 16 parameters
00049 */
00050 template <typename CLASS, typename T0 = NullType, typename T1 = NullType, typename T2 = NullType, typename T3 = NullType, typename T4 = NullType, typename T5 = NullType, typename T6 = NullType, typename T7 = NullType, typename T8 = NullType, typename T9 = NullType, typename T10 = NullType, typename T11 = NullType, typename T12 = NullType, typename T13 = NullType, typename T14 = NullType, typename T15 = NullType>
00051 class FuncConstructor : public Func<Object*, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> {
00052     public:
00053         typedef typename Type<T0> ::_Type _T0;
00054         typedef typename Type<T1> ::_Type _T1;
00055         typedef typename Type<T2> ::_Type _T2;
00056         typedef typename Type<T3> ::_Type _T3;
00057         typedef typename Type<T4> ::_Type _T4;
00058         typedef typename Type<T5> ::_Type _T5;
00059         typedef typename Type<T6> ::_Type _T6;
00060         typedef typename Type<T7> ::_Type _T7;
00061         typedef typename Type<T8> ::_Type _T8;
00062         typedef typename Type<T9> ::_Type _T9;
00063         typedef typename Type<T10>::_Type _T10;
00064         typedef typename Type<T11>::_Type _T11;
00065         typedef typename Type<T12>::_Type _T12;
00066         typedef typename Type<T13>::_Type _T13;
00067         typedef typename Type<T14>::_Type _T14;
00068         typedef typename Type<T15>::_Type _T15;
00069 
00070         FuncConstructor() {
00071         }
00072 
00073         virtual ~FuncConstructor() {
00074         }
00075 
00076         Object *operator ()(_T0 t0, _T1 t1, _T2 t2, _T3 t3, _T4 t4, _T5 t5, _T6 t6, _T7 t7, _T8 t8, _T9 t9, _T10 t10, _T11 t11, _T12 t12, _T13 t13, _T14 t14, _T15 t15) {
00077             return new CLASS(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15);
00078         }
00079 
00080         virtual DynFunc *Clone() const override {
00081             return new FuncConstructor();
00082         }
00083 };
00084 
00085 /**
00086 *  @brief
00087 *    Functoid that creates an object
00088 *
00089 *  @remarks
00090 *    Implementation for 15 parameters
00091 */
00092 template <typename CLASS, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14>
00093 class FuncConstructor<CLASS, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> : public Func<Object*, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> {
00094     public:
00095         typedef typename Type<T0> ::_Type _T0;
00096         typedef typename Type<T1> ::_Type _T1;
00097         typedef typename Type<T2> ::_Type _T2;
00098         typedef typename Type<T3> ::_Type _T3;
00099         typedef typename Type<T4> ::_Type _T4;
00100         typedef typename Type<T5> ::_Type _T5;
00101         typedef typename Type<T6> ::_Type _T6;
00102         typedef typename Type<T7> ::_Type _T7;
00103         typedef typename Type<T8> ::_Type _T8;
00104         typedef typename Type<T9> ::_Type _T9;
00105         typedef typename Type<T10>::_Type _T10;
00106         typedef typename Type<T11>::_Type _T11;
00107         typedef typename Type<T12>::_Type _T12;
00108         typedef typename Type<T13>::_Type _T13;
00109         typedef typename Type<T14>::_Type _T14;
00110 
00111         FuncConstructor() {
00112         }
00113 
00114         virtual ~FuncConstructor() {
00115         }
00116 
00117         Object *operator ()(_T0 t0, _T1 t1, _T2 t2, _T3 t3, _T4 t4, _T5 t5, _T6 t6, _T7 t7, _T8 t8, _T9 t9, _T10 t10, _T11 t11, _T12 t12, _T13 t13, _T14 t14) {
00118             return new CLASS(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14);
00119         }
00120 
00121         virtual DynFunc *Clone() const override {
00122             return new FuncConstructor();
00123         }
00124 };
00125 
00126 /**
00127 *  @brief
00128 *    Functoid that creates an object
00129 *
00130 *  @remarks
00131 *    Implementation for 14 parameters
00132 */
00133 template <typename CLASS, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13>
00134 class FuncConstructor<CLASS, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> : public Func<Object*, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> {
00135     public:
00136         typedef typename Type<T0> ::_Type _T0;
00137         typedef typename Type<T1> ::_Type _T1;
00138         typedef typename Type<T2> ::_Type _T2;
00139         typedef typename Type<T3> ::_Type _T3;
00140         typedef typename Type<T4> ::_Type _T4;
00141         typedef typename Type<T5> ::_Type _T5;
00142         typedef typename Type<T6> ::_Type _T6;
00143         typedef typename Type<T7> ::_Type _T7;
00144         typedef typename Type<T8> ::_Type _T8;
00145         typedef typename Type<T9> ::_Type _T9;
00146         typedef typename Type<T10>::_Type _T10;
00147         typedef typename Type<T11>::_Type _T11;
00148         typedef typename Type<T12>::_Type _T12;
00149         typedef typename Type<T13>::_Type _T13;
00150 
00151         FuncConstructor() {
00152         }
00153 
00154         virtual ~FuncConstructor() {
00155         }
00156 
00157         Object *operator ()(_T0 t0, _T1 t1, _T2 t2, _T3 t3, _T4 t4, _T5 t5, _T6 t6, _T7 t7, _T8 t8, _T9 t9, _T10 t10, _T11 t11, _T12 t12, _T13 t13) {
00158             return new CLASS(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13);
00159         }
00160 
00161         virtual DynFunc *Clone() const override {
00162             return new FuncConstructor();
00163         }
00164 };
00165 
00166 /**
00167 *  @brief
00168 *    Functoid that creates an object
00169 *
00170 *  @remarks
00171 *    Implementation for 13 parameters
00172 */
00173 template <typename CLASS, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12>
00174 class FuncConstructor<CLASS, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> : public Func<Object*, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> {
00175     public:
00176         typedef typename Type<T0> ::_Type _T0;
00177         typedef typename Type<T1> ::_Type _T1;
00178         typedef typename Type<T2> ::_Type _T2;
00179         typedef typename Type<T3> ::_Type _T3;
00180         typedef typename Type<T4> ::_Type _T4;
00181         typedef typename Type<T5> ::_Type _T5;
00182         typedef typename Type<T6> ::_Type _T6;
00183         typedef typename Type<T7> ::_Type _T7;
00184         typedef typename Type<T8> ::_Type _T8;
00185         typedef typename Type<T9> ::_Type _T9;
00186         typedef typename Type<T10>::_Type _T10;
00187         typedef typename Type<T11>::_Type _T11;
00188         typedef typename Type<T12>::_Type _T12;
00189 
00190         FuncConstructor() {
00191         }
00192 
00193         virtual ~FuncConstructor() {
00194         }
00195 
00196         Object *operator ()(_T0 t0, _T1 t1, _T2 t2, _T3 t3, _T4 t4, _T5 t5, _T6 t6, _T7 t7, _T8 t8, _T9 t9, _T10 t10, _T11 t11, _T12 t12) {
00197             return new CLASS(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12);
00198         }
00199 
00200         virtual DynFunc *Clone() const override {
00201             return new FuncConstructor();
00202         }
00203 };
00204 
00205 /**
00206 *  @brief
00207 *    Functoid that creates an object
00208 *
00209 *  @remarks
00210 *    Implementation for 12 parameters
00211 */
00212 template <typename CLASS, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11>
00213 class FuncConstructor<CLASS, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> : public Func<Object*, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> {
00214     public:
00215         typedef typename Type<T0> ::_Type _T0;
00216         typedef typename Type<T1> ::_Type _T1;
00217         typedef typename Type<T2> ::_Type _T2;
00218         typedef typename Type<T3> ::_Type _T3;
00219         typedef typename Type<T4> ::_Type _T4;
00220         typedef typename Type<T5> ::_Type _T5;
00221         typedef typename Type<T6> ::_Type _T6;
00222         typedef typename Type<T7> ::_Type _T7;
00223         typedef typename Type<T8> ::_Type _T8;
00224         typedef typename Type<T9> ::_Type _T9;
00225         typedef typename Type<T10>::_Type _T10;
00226         typedef typename Type<T11>::_Type _T11;
00227 
00228         FuncConstructor() {
00229         }
00230 
00231         virtual ~FuncConstructor() {
00232         }
00233 
00234         Object *operator ()(_T0 t0, _T1 t1, _T2 t2, _T3 t3, _T4 t4, _T5 t5, _T6 t6, _T7 t7, _T8 t8, _T9 t9, _T10 t10, _T11 t11) {
00235             return new CLASS(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11);
00236         }
00237 
00238         virtual DynFunc *Clone() const override {
00239             return new FuncConstructor();
00240         }
00241 };
00242 
00243 /**
00244 *  @brief
00245 *    Functoid that creates an object
00246 *
00247 *  @remarks
00248 *    Implementation for 11 parameters
00249 */
00250 template <typename CLASS, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10>
00251 class FuncConstructor<CLASS, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> : public Func<Object*, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> {
00252     public:
00253         typedef typename Type<T0> ::_Type _T0;
00254         typedef typename Type<T1> ::_Type _T1;
00255         typedef typename Type<T2> ::_Type _T2;
00256         typedef typename Type<T3> ::_Type _T3;
00257         typedef typename Type<T4> ::_Type _T4;
00258         typedef typename Type<T5> ::_Type _T5;
00259         typedef typename Type<T6> ::_Type _T6;
00260         typedef typename Type<T7> ::_Type _T7;
00261         typedef typename Type<T8> ::_Type _T8;
00262         typedef typename Type<T9> ::_Type _T9;
00263         typedef typename Type<T10>::_Type _T10;
00264 
00265         FuncConstructor() {
00266         }
00267 
00268         virtual ~FuncConstructor() {
00269         }
00270 
00271         Object *operator ()(_T0 t0, _T1 t1, _T2 t2, _T3 t3, _T4 t4, _T5 t5, _T6 t6, _T7 t7, _T8 t8, _T9 t9, _T10 t10) {
00272             return new CLASS(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10);
00273         }
00274 
00275         virtual DynFunc *Clone() const override {
00276             return new FuncConstructor();
00277         }
00278 };
00279 
00280 /**
00281 *  @brief
00282 *    Functoid that creates an object
00283 *
00284 *  @remarks
00285 *    Implementation for 10 parameters
00286 */
00287 template <typename CLASS, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
00288 class FuncConstructor<CLASS, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> : public Func<Object*, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> {
00289     public:
00290         typedef typename Type<T0> ::_Type _T0;
00291         typedef typename Type<T1> ::_Type _T1;
00292         typedef typename Type<T2> ::_Type _T2;
00293         typedef typename Type<T3> ::_Type _T3;
00294         typedef typename Type<T4> ::_Type _T4;
00295         typedef typename Type<T5> ::_Type _T5;
00296         typedef typename Type<T6> ::_Type _T6;
00297         typedef typename Type<T7> ::_Type _T7;
00298         typedef typename Type<T8> ::_Type _T8;
00299         typedef typename Type<T9> ::_Type _T9;
00300 
00301         FuncConstructor() {
00302         }
00303 
00304         virtual ~FuncConstructor() {
00305         }
00306 
00307         Object *operator ()(_T0 t0, _T1 t1, _T2 t2, _T3 t3, _T4 t4, _T5 t5, _T6 t6, _T7 t7, _T8 t8, _T9 t9) {
00308             return new CLASS(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9);
00309         }
00310 
00311         virtual DynFunc *Clone() const override {
00312             return new FuncConstructor();
00313         }
00314 };
00315 
00316 /**
00317 *  @brief
00318 *    Functoid that creates an object
00319 *
00320 *  @remarks
00321 *    Implementation for 9 parameters
00322 */
00323 template <typename CLASS, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
00324 class FuncConstructor<CLASS, T0, T1, T2, T3, T4, T5, T6, T7, T8> : public Func<Object*, T0, T1, T2, T3, T4, T5, T6, T7, T8> {
00325     public:
00326         typedef typename Type<T0> ::_Type _T0;
00327         typedef typename Type<T1> ::_Type _T1;
00328         typedef typename Type<T2> ::_Type _T2;
00329         typedef typename Type<T3> ::_Type _T3;
00330         typedef typename Type<T4> ::_Type _T4;
00331         typedef typename Type<T5> ::_Type _T5;
00332         typedef typename Type<T6> ::_Type _T6;
00333         typedef typename Type<T7> ::_Type _T7;
00334         typedef typename Type<T8> ::_Type _T8;
00335 
00336         FuncConstructor() {
00337         }
00338 
00339         virtual ~FuncConstructor() {
00340         }
00341 
00342         Object *operator ()(_T0 t0, _T1 t1, _T2 t2, _T3 t3, _T4 t4, _T5 t5, _T6 t6, _T7 t7, _T8 t8) {
00343             return new CLASS(t0, t1, t2, t3, t4, t5, t6, t7, t8);
00344         }
00345 
00346         virtual DynFunc *Clone() const override {
00347             return new FuncConstructor();
00348         }
00349 };
00350 
00351 /**
00352 *  @brief
00353 *    Functoid that creates an object
00354 *
00355 *  @remarks
00356 *    Implementation for 8 parameters
00357 */
00358 template <typename CLASS, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
00359 class FuncConstructor<CLASS, T0, T1, T2, T3, T4, T5, T6, T7> : public Func<Object*, T0, T1, T2, T3, T4, T5, T6, T7> {
00360     public:
00361         typedef typename Type<T0> ::_Type _T0;
00362         typedef typename Type<T1> ::_Type _T1;
00363         typedef typename Type<T2> ::_Type _T2;
00364         typedef typename Type<T3> ::_Type _T3;
00365         typedef typename Type<T4> ::_Type _T4;
00366         typedef typename Type<T5> ::_Type _T5;
00367         typedef typename Type<T6> ::_Type _T6;
00368         typedef typename Type<T7> ::_Type _T7;
00369 
00370         FuncConstructor() {
00371         }
00372 
00373         virtual ~FuncConstructor() {
00374         }
00375 
00376         Object *operator ()(_T0 t0, _T1 t1, _T2 t2, _T3 t3, _T4 t4, _T5 t5, _T6 t6, _T7 t7) {
00377             return new CLASS(t0, t1, t2, t3, t4, t5, t6, t7);
00378         }
00379 
00380         virtual DynFunc *Clone() const override {
00381             return new FuncConstructor();
00382         }
00383 };
00384 
00385 /**
00386 *  @brief
00387 *    Functoid that creates an object
00388 *
00389 *  @remarks
00390 *    Implementation for 7 parameters
00391 */
00392 template <typename CLASS, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
00393 class FuncConstructor<CLASS, T0, T1, T2, T3, T4, T5, T6> : public Func<Object*, T0, T1, T2, T3, T4, T5, T6> {
00394     public:
00395         typedef typename Type<T0> ::_Type _T0;
00396         typedef typename Type<T1> ::_Type _T1;
00397         typedef typename Type<T2> ::_Type _T2;
00398         typedef typename Type<T3> ::_Type _T3;
00399         typedef typename Type<T4> ::_Type _T4;
00400         typedef typename Type<T5> ::_Type _T5;
00401         typedef typename Type<T6> ::_Type _T6;
00402 
00403         FuncConstructor() {
00404         }
00405 
00406         virtual ~FuncConstructor() {
00407         }
00408 
00409         Object *operator ()(_T0 t0, _T1 t1, _T2 t2, _T3 t3, _T4 t4, _T5 t5, _T6 t6) {
00410             return new CLASS(t0, t1, t2, t3, t4, t5, t6);
00411         }
00412 
00413         virtual DynFunc *Clone() const override {
00414             return new FuncConstructor();
00415         }
00416 };
00417 
00418 /**
00419 *  @brief
00420 *    Functoid that creates an object
00421 *
00422 *  @remarks
00423 *    Implementation for 6 parameters
00424 */
00425 template <typename CLASS, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5>
00426 class FuncConstructor<CLASS, T0, T1, T2, T3, T4, T5> : public Func<Object*, T0, T1, T2, T3, T4, T5> {
00427     public:
00428         typedef typename Type<T0> ::_Type _T0;
00429         typedef typename Type<T1> ::_Type _T1;
00430         typedef typename Type<T2> ::_Type _T2;
00431         typedef typename Type<T3> ::_Type _T3;
00432         typedef typename Type<T4> ::_Type _T4;
00433         typedef typename Type<T5> ::_Type _T5;
00434 
00435         FuncConstructor() {
00436         }
00437 
00438         virtual ~FuncConstructor() {
00439         }
00440 
00441         Object *operator ()(_T0 t0, _T1 t1, _T2 t2, _T3 t3, _T4 t4, _T5 t5) {
00442             return new CLASS(t0, t1, t2, t3, t4, t5);
00443         }
00444 
00445         virtual DynFunc *Clone() const override {
00446             return new FuncConstructor();
00447         }
00448 };
00449 
00450 /**
00451 *  @brief
00452 *    Functoid that creates an object
00453 *
00454 *  @remarks
00455 *    Implementation for 5 parameters
00456 */
00457 template <typename CLASS, typename T0, typename T1, typename T2, typename T3, typename T4>
00458 class FuncConstructor<CLASS, T0, T1, T2, T3, T4> : public Func<Object*, T0, T1, T2, T3, T4> {
00459     public:
00460         typedef typename Type<T0> ::_Type _T0;
00461         typedef typename Type<T1> ::_Type _T1;
00462         typedef typename Type<T2> ::_Type _T2;
00463         typedef typename Type<T3> ::_Type _T3;
00464         typedef typename Type<T4> ::_Type _T4;
00465 
00466         FuncConstructor() {
00467         }
00468 
00469         virtual ~FuncConstructor() {
00470         }
00471 
00472         Object *operator ()(_T0 t0, _T1 t1, _T2 t2, _T3 t3, _T4 t4) {
00473             return new CLASS(t0, t1, t2, t3, t4);
00474         }
00475 
00476         virtual DynFunc *Clone() const override {
00477             return new FuncConstructor();
00478         }
00479 };
00480 
00481 /**
00482 *  @brief
00483 *    Functoid that creates an object
00484 *
00485 *  @remarks
00486 *    Implementation for 4 parameters
00487 */
00488 template <typename CLASS, typename T0, typename T1, typename T2, typename T3>
00489 class FuncConstructor<CLASS, T0, T1, T2, T3> : public Func<Object*, T0, T1, T2, T3> {
00490     public:
00491         typedef typename Type<T0> ::_Type _T0;
00492         typedef typename Type<T1> ::_Type _T1;
00493         typedef typename Type<T2> ::_Type _T2;
00494         typedef typename Type<T3> ::_Type _T3;
00495 
00496         FuncConstructor() {
00497         }
00498 
00499         virtual ~FuncConstructor() {
00500         }
00501 
00502         Object *operator ()(_T0 t0, _T1 t1, _T2 t2, _T3 t3) {
00503             return new CLASS(t0, t1, t2, t3);
00504         }
00505 
00506         virtual DynFunc *Clone() const override {
00507             return new FuncConstructor();
00508         }
00509 };
00510 
00511 /**
00512 *  @brief
00513 *    Functoid that creates an object
00514 *
00515 *  @remarks
00516 *    Implementation for 3 parameters
00517 */
00518 template <typename CLASS, typename T0, typename T1, typename T2>
00519 class FuncConstructor<CLASS, T0, T1, T2> : public Func<Object*, T0, T1, T2> {
00520     public:
00521         typedef typename Type<T0> ::_Type _T0;
00522         typedef typename Type<T1> ::_Type _T1;
00523         typedef typename Type<T2> ::_Type _T2;
00524 
00525         FuncConstructor() {
00526         }
00527 
00528         virtual ~FuncConstructor() {
00529         }
00530 
00531         Object *operator ()(_T0 t0, _T1 t1, _T2 t2) {
00532             return new CLASS(t0, t1, t2);
00533         }
00534 
00535         virtual DynFunc *Clone() const override {
00536             return new FuncConstructor();
00537         }
00538 };
00539 
00540 /**
00541 *  @brief
00542 *    Functoid that creates an object
00543 *
00544 *  @remarks
00545 *    Implementation for 2 parameters
00546 */
00547 template <typename CLASS, typename T0, typename T1>
00548 class FuncConstructor<CLASS, T0, T1> : public Func<Object*, T0, T1> {
00549     public:
00550         typedef typename Type<T0> ::_Type _T0;
00551         typedef typename Type<T1> ::_Type _T1;
00552 
00553         FuncConstructor() {
00554         }
00555 
00556         virtual ~FuncConstructor() {
00557         }
00558 
00559         Object *operator ()(_T0 t0, _T1 t1) {
00560             return new CLASS(t0, t1);
00561         }
00562 
00563         virtual DynFunc *Clone() const override {
00564             return new FuncConstructor();
00565         }
00566 };
00567 
00568 /**
00569 *  @brief
00570 *    Functoid that creates an object
00571 *
00572 *  @remarks
00573 *    Implementation for 1 parameters
00574 */
00575 template <typename CLASS, typename T0>
00576 class FuncConstructor<CLASS, T0> : public Func<Object*, T0> {
00577     public:
00578         typedef typename Type<T0> ::_Type _T0;
00579 
00580         FuncConstructor() {
00581         }
00582 
00583         virtual ~FuncConstructor() {
00584         }
00585 
00586         Object *operator ()(_T0 t0) {
00587             return new CLASS(t0);
00588         }
00589 
00590         virtual DynFunc *Clone() const override {
00591             return new FuncConstructor();
00592         }
00593 };
00594 
00595 /**
00596 *  @brief
00597 *    Functoid that creates an object
00598 *
00599 *  @remarks
00600 *    Implementation for 0 parameters
00601 */
00602 template <typename CLASS>
00603 class FuncConstructor<CLASS> : public Func<Object*> {
00604     public:
00605         FuncConstructor() {
00606         }
00607 
00608         virtual ~FuncConstructor() {
00609         }
00610 
00611         Object *operator ()() {
00612             return new CLASS();
00613         }
00614 
00615         virtual DynFunc *Clone() const override {
00616             return new FuncConstructor();
00617         }
00618 };
00619 
00620 
00621 //[-------------------------------------------------------]
00622 //[ Namespace                                             ]
00623 //[-------------------------------------------------------]
00624 } // PLCore
00625 
00626 
00627 #endif // __PLCORE_FUNC_CONSTRUCTOR_H__


PixelLight PixelLight 0.9.11-R1
Copyright (C) 2002-2012 by The PixelLight Team
Last modified Thu Feb 23 2012 14:08:54
The content of this PixelLight document is published under the
Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported