是否可以在我自己的默认ctor定义中调用聚合初始化?
GCC抱怨"错误:构造函数委托自己"使用以下代码:
appUsageStats.get(appInformation.packageName).getLastTimeUsed()
我目前在ctor机构中使用Map<String, UsageStats> appUsageStats appUsageStats = UStats.getMapOfAggregatedUsage(MainActivity.this);
if(appUsageStats.get(appInformation.packageName)!=null)
{
long used = appUsageStats.get(appInformation.packageName).getLastTimeUsed();
long installedDiff2 = new Date().getTime() - new Date(used).getTime();
long daysGap = TimeUnit.DAYS.convert(installedDiff2, TimeUnit.MILLISECONDS);
if(daysGap==0)
{
appInfoObj.setAppUsedDate("Used : Today");
}else{
appInfoObj.setAppUsedDate("Used : " + String.valueOf(daysGap) + " days ago");
}
appInfoObj.setAppUsedDateNumber(daysGap);
}
。
答案 0 :(得分:1)
一种方法是以下列方式欺骗重载决策:
AttributeError: 'Series' object has no attribute 'df'
另一种方法是使用类内默认成员初始化:
struct X {
int x, y, z, p, q, r;
X(int) : x{}, y{}, z{}, p{}, q{}, r{} { }
X() : X(0) { }
};
在您的具体示例中,您也可以这样做:
struct X {
int x = 0, y = 0, z = 0, p = 0, q = 0, r = 0;
};
答案 1 :(得分:0)
您可以使用CRTP执行此操作。
reduce
但我不保证这是安全的。
答案 2 :(得分:0)
使用factory pattern - 将构造函数的主体移动到单独的类:
struct X {
int x, y, z, p, q, r;
};
struct XFactory {
X create();
};
X XFactory::create()
{
X x{};
// do needed modification
return x;
}
虽然我总是喜欢工厂模式 - 还有其他方式更符合您的显式需求 - 为每个成员数据定义默认构造函数:
template <typename T>
struct DefaultConstructibleData
{
T data;
DefaultConstructibleData() data{} {}
};
并使用它:
struct X {
DefaultConstructibleData<int> x, y, z, p, q, r;
X()
{
// do whatever you needs to do
// all x,y,... are already constructed to their defaults
}
};