Question about function templates when parameter is void

Uranuz neuranuz at gmail.com
Fri Nov 8 23:11:48 PST 2013


I have a question. In my code I want to make uniform template 
function to call JSON RPC methods (that are regular D functions 
of any type). So I need some way to call this function with no 
function params and with them in the same manner. There is a 
concrete example, because this description isn't obvious (I think 
that)

//----------------
import std.stdio, std.json, std.conv, std.traits;


JSONValue getStdJSON(T)(T dValue)
{
	static if( is( T == void ) )
	{	
		JSONValue result;
	 	result.type = JSON_Type.NULL;
		return result;
	}
	else
	{
		//....
	}
	
}

void f()
{
	writeln("Hello!!");	
}

void main()
{
	writeln(getStdJSON(f()));
}
//------------------
Compilation output:
/d661/f210.d(28): Error: template f210.getStdJSON does not match 
any function template declaration. Candidates are:
/d661/f210.d(6):        f210.getStdJSON(T)(T dValue)
/d661/f210.d(28): Error: template f210.getStdJSON(T)(T dValue) 
cannot deduce template function from argument types !()(void)

//---------------

So my question is how can I implement something like this? 
Problem is that we don't really have value of type void, but I 
want uniform way to call this function when it has parameter with 
concrete type and not.


More information about the Digitalmars-d-learn mailing list