有没有办法将未知数量的args(可以是char字符串或整数)传递给函数,然后将它们连接到char数组缓冲区?
例如,为了能够调用以下所有函数:
bufcat("this", 1, 3, "that");
// buffer = "this13that"
bufcat(1, "this", "that", 3, 4000000, "other");
// buffer = "1thisthat34000000other"
bufcat(1000000,2,3,4,5,6,7,8,9,10,11,12,13,"onemillionandfiftytwo");
// buffer = "10000002345678910111213onemillionandfiftytwo"
答案 0 :(得分:3)
您可以使用可变参数模板和字符串流:
iteration
这将连接您将参数传递到字符串流中的任何内容。它将为Args
中的每个参数调用bufcat(1000000,2,3,4,5,6,7,8,9,10,11,12,13,"onemillionandfiftytwo");
lambda。
然后,你可以简单地调用你的函数:
10000002345678910111213onemillionandfiftytwo
它会产生fun hasPermission(permission: String): Boolean {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) return true // must be granted after installed.
return mAppSet.appContext.checkSelfPermission(permission) == PackageManager.PERMISSION_GRANTED
}
答案 1 :(得分:0)
使用可变参数模板在c ++ 11中可以使用简单的解决方案。 如果性能很重要,那么经典printf习惯用法所需的样板代码可能比这里使用的内存分配更容易接受。
#include <string>
#include <iostream>
inline std::string bufcat() { return ""; }
template<typename value_type> std::string bufcat(const value_type &value) { return std::to_string(value); }
template<> std::string bufcat(const bool &b) { return b ? "true" : "false"; }
std::string bufcat(const std::string &str) { return str; }
std::string bufcat(const char *str) { return str; }
template <typename arg0_type, typename ...arg_types>
std::string bufcat(arg0_type arg0, arg_types ... args)
{ return bufcat(arg0).append(bufcat(args...)); }
int main()
{
std::cout << bufcat(1000000,2,3,4,5,6,7,8,9,10,11,12,13,"onemillionandfiftytwo") << "\n";
}