d 열 플러그인 예

13274 단어 필기
원문은 여기 한 편 더 있고 여기 또 여기 다 볼 수 있어요.원 프로그래밍 관련.우리는 다음을 원합니다.
enum sql = `
	CREATE TABLE Person (
		id INTEGER NOT NULL,
		name TEXT,
		birthday DATE
	);
`;

/+
	        :

	class Person {
     
		int id;
		string text;
		Date birthday;

		void save() {
     
			/*      */
		}
	}
+/

이렇게:
class ObjectImpl(some_arguments) {
     
		//   
	}

	mixin("alias " ~ some_name ~ " ObjectImpl!(whatever, args);");

다음과 같습니다.
struct     {
     
	string name;
	string type;
}

struct     {
     
	string name;
	   []  ;
}

          (string sql) {
     
	    table;//sql  

	//     
	table.name = "Person";//  
	table.  = [
		   ("id", "INTEGER"),
		   ("name", "TEXT"),
		   ("birthday", "DATE"),
	];

	return table;
}//    sql   


//   ,      +  

mixin template      (string sql) {
     //@2
	// sql D,     
	template       (string     ) {
     
		static if(     == "INTEGER")
			alias        = int;
		else static if(     == "DATE") {
     
			import std.datetime;
			alias        = Date;
		} else static if(     == "TEXT")
			alias        = string;
		else static assert(0, "    " ~     );
	}//      

	//       
	struct     {
     
		string name;
	}//       .

	//     ,    ,     
	mixin template     (   [] ){
     //    
		mixin("
			//     ,    
			@   ( [0].name)
			//       ,   
			      !( [0].type) " ~  [0].name ~ ";");//      .
		static if( .length > 1)
			mixin     !( [1 .. $]);
	}//    ,              .

	//          
	class         {
     
		//    
		mixin     !(      (sql). );
        //      
		void save() {
     //    
			import std.stdio;
			import std.traits;

			//          
			foreach(idx, variable; getSymbolsByUDA!(       ,    )) {
     
				auto name = getSymbolsByUDA!(       ,    )[idx].stringof;
				writeln(name, " = ", variable);
			}//  

		}
	}

	//             
	mixin("alias " ~       (sql).name ~ " =        ;");//          .
}

//    ,  
mixin      !(sql);//@1

void main() {
     
	auto person = new Person;
	person.id = 10;
	person.save();
}

몇 줄 , 모든 것을 해결한다.

좋은 웹페이지 즐겨찾기