Templates 无法解析模板函数的类型
我正在尝试用D编写一些非常简单的代码,但是我在使用一个标准库模板函数时遇到了一些问题(特别是Templates 无法解析模板函数的类型,templates,d,phobos,Templates,D,Phobos,我正在尝试用D编写一些非常简单的代码,但是我在使用一个标准库模板函数时遇到了一些问题(特别是std.algorithm中的nextpermutat) 我要做的关键是创建所有泛数字的排列(也就是说,数字包括所有1到9的值,只需要一次) 为此,我做了以下工作: import std.algorithm; import std.conv; int[] pandigitals() { char[] initial = "123456789".dup; auto pan = [to!in
std.algorithm
中的nextpermutat
)
我要做的关键是创建所有泛数字的排列(也就是说,数字包括所有1到9的值,只需要一次)
为此,我做了以下工作:
import std.algorithm;
import std.conv;
int[] pandigitals()
{
char[] initial = "123456789".dup;
auto pan = [to!int(initial)];
while(nextPermutation!(initial)) {
pan ~= to!int(initial);
}
return pan;
}
这给了我一个错误:
错误:无法解析NextPermutate的类型!(首字母)
我还尝试显式设置类型:
while(nextPermutation!("a<b", char[])(initial))
while(nextpermutate!)(好吧,你的第一个问题是你把initial
作为模板参数而不是函数参数来传递。!()
是模板参数。所以,不是
while(nextPermutation!(initial))
你需要做什么
while(nextPermutation(initial)) {
现在,这仍然会给你一个错误
q.d(10): Error: template std.algorithm.nextPermutation cannot deduce function from argument types !()(char[]), candidates are:
/usr/include/D/phobos/std/algorithm.d(12351): std.algorithm.nextPermutation(alias less = "a<b", BidirectionalRange)(ref BidirectionalRange range) if (isBidirectionalRange!BidirectionalRange && hasSwappableElements!BidirectionalRange)
谢谢,我有一个静态断言
,用于isBidirectionalRange!(char[]);
但是忘记了hasSwappableElements
约束。
int[] pandigitals()
{
dchar[] initial = "123456789"d.dup;
auto pan = [to!int(initial)];
while(nextPermutation(initial)) {
pan ~= to!int(initial);
}
return pan;
}