Scott Schurr实现了编译时字符串:
public static int findMinCoins(int[] currency, int amount) {
int min = findMinCoins(currency, amount, 0);
System.out.print("The coins used were: ");
return min;
}
private static int findMinCoins(int[] currency, int amount, int min){
int number, value1, value2;
int min1 = min;
for(int i=currency.length-1; i>=0; i--) {
if (amount>=currency[i]){
amount = amount - currency[i];
System.out.print(currency[i] + " ");
min1 = findMinCoins(currency, amount, min1);
return ++min1;
}
}
return min1;
}
这很好,但我想在class str_const {
const char* const p_;
const std::size_t sz_;
public:
template <std::size_t N>
constexpr str_const(const char(&a)[N]) : p_(a), sz_(N-1) {}
constexpr char operator[](std::size_t n) {
return n < sz_ ? p_[n] : throw std::out_of_range("");
}
constexpr std::size_t size() {
return sz_;
}
};
这样的编译时字符列表上运行。 有没有办法将string<'H', 'e', 'l', 'l', 'o'>
转换为此类列表?
我能想到的实现路线是模板和功能。通过模板将str_const
转换为其他内容是不可能的,因为str_const
是非类型模板参数的无效类型。此外,定义此类函数也是不可能的,因为根据其参数的值,它将具有不同的返回值str_const
。
UPD。编辑以摆脱“你的问题可能是重复的”消息,因为从这个问题的文本中可以明显看出字符串不是整数。
答案 0 :(得分:1)
我认为这应该是可能的。您可以在常量表达式中使用这些constexpr字符串类型。因此,您可以将g.plot(graph.data.values(x=values[0], y=values[1]))
传递给期望积分参数的模板。
因此,您应该能够创建从0到str[0]
的范围模板。然后,你会对重复调用concat构建一个构建mpl :: string的东西进行递归实例化。
实现这一点需要一段时间,所以我现在不打算提供代码,但我认为这个想法是可行的。这是我的字符串实现可能有所帮助。该代码具有测试,证明它可以在您尝试使用它的上下文中使用。
https://crazycpp.wordpress.com/2014/10/17/compile-time-strings-with-constexpr/ https://github.com/crazy-eddie/crazycpp/tree/master/20141016-constexprstr