我试图理解如何使用alignas,我想知道它是否可以替代pragma pack,我已经努力验证它但没有运气.使用gcc 4.8.1(http://ideone.com/04mxpI)我总是在STestAlignas下面获得8个字节,而使用pragma pack时它是5个字节.我想要的是使sizeof(STestAlignas)返回5.我尝试在clang 3.3上运行此代码(http://gcc.godbolt.org/)但我收到错误:
!!错误:对于'long'类型,请求的对齐小于8的最小对齐 - 正好在alignas使用之下.
那么也许对齐有最小的对齐值?
下面是我的测试代码:
#include <iostream>
#include <cstddef>
using namespace std;
#pragma pack(1)
struct STestPragmaPack {
char c;
long d;
} datasPP;
#pragma pack()
struct STestAttributPacked {
char c;
long d;
} __attribute__((packed)) datasAP;
struct STestAlignas {
char c;
alignas(char) long d;
} datasA;
int main() {
cout << "pragma pack = " << sizeof(datasPP) << endl;
cout << "attribute packed = " << sizeof(datasAP) << endl;
cout << "alignas …Run Code Online (Sandbox Code Playgroud) 我有一个WebView,我在AsyncTask.doInBackground中使用loadUrl初始化.我将其初始化如下:
webView.post(new Runnable() {
@Override
public void run() {
webView.loadUrl(authURL);
}
});
Run Code Online (Sandbox Code Playgroud)
AsyncTask在Activity.onCreate()中作为最后执行,问题是大多数时候网页没有加载,我看到白屏.如果我用处理程序替换webView,那么一切正常.我在这里错过了什么?
我有 runnable 正在从互联网下载一些文件,它看起来如下:
class Downloader implements Runnable {
volatile Status status;
public void run() {
// ...
while (status.isInProgress()) { ... }
}
}
Run Code Online (Sandbox Code Playgroud)
状态如下所示:
public enum Status {
PAUSED {
public int someData() { return 0; }
},
INPROGRESS {
public int someData() { return 1; }
}
public abstract int someData();
private String msg;
public String getSomeMsg() {
return msg;
}
public void setSomeMsg(String s) {
msg=s;
}
public boolean isInProgress() {
return this == INPROGRESS;
}
} …Run Code Online (Sandbox Code Playgroud) Windows 8 API是否允许我编写一个使用XAML进行UI和DirectX渲染3D对象的应用程序?说我正在写一个3D建模应用程序.我想在XAML中创建很多对话框和UI元素,以及使用DirectX渲染的单个矩形窗口.我更喜欢使用C++.这可能吗?
我有以下类层次结构:
class Base { // This class cannot be modified
public:
Base(int a, int b, int c) {
if ( a == 100 && b == 200 && c < 100 ) // whatever condition
throw "Error!";
}
};
class Derived : public Base { // this class can be modified
public:
Derived(int a, int b, int c) : Base(a, b, c) {}
};
Run Code Online (Sandbox Code Playgroud)
类Derived在代码中的许多地方使用,因此它不能被某种工厂函数替换.
现在的问题是,是否有一些构造允许我在调用Base构造函数之前修复a,b,c值?
我知道我可以使用以下功能:
Derived(int a, int b, int c) : Base(FixA(a), FixB(b), FixC(c)) {}
int FixA(int …Run Code Online (Sandbox Code Playgroud) 我已经安装了支持库,以便在android pre API 11中使用操作栏
当我启动应用程序时,logcat会出现此错误:
08-20 19:54:41.600: I/dalvikvm(9828): Failed resolving Landroid/support/v7/widget/SearchView$5; interface 809 'Landroid/view/View$OnLayoutChangeListener;'
08-20 19:54:41.600: W/dalvikvm(9828): Link of class 'Landroid/support/v7/widget/SearchView$5;' failed
08-20 19:54:41.600: E/dalvikvm(9828): Could not find class 'android.support.v7.widget.SearchView$5', referenced from method android.support.v7.widget.SearchView.addOnLayoutChangeListenerToDropDownAnchorSDK11
08-20 19:54:41.600: W/dalvikvm(9828): VFY: unable to resolve new-instance 734 (Landroid/support/v7/widget/SearchView$5;) in Landroid/support/v7/widget/SearchView;
08-20 19:54:41.600: D/dalvikvm(9828): VFY: replacing opcode 0x22 at 0x0002
08-20 19:54:41.600: D/dalvikvm(9828): VFY: dead code 0x0004-000a in Landroid/support/v7/widget/SearchView;.addOnLayoutChangeListenerToDropDownAnchorSDK11 ()V
Run Code Online (Sandbox Code Playgroud)
有人可以帮助我,我搜索网络,但我什么也没发现.谢谢
MainActivity.Java
package com.example.fanculo;
import android.os.Bundle;
import android.app.SearchManager;
import android.content.Context;
import android.support.v4.view.MenuItemCompat;
import android.support.v7.widget.SearchView;
import …Run Code Online (Sandbox Code Playgroud) error-handling android runtime class android-support-library
我想用decltype替换写函数签名,发现它不能用大多数编译器编译.这是一个新功能还是未指定的行为?
#include <iostream>
template <typename T, T nontype>
struct CL {
void call() { nontype(123); }
};
void f(int n) {
std::cout << n << std::endl;
}
CL<void(*)(int), f> cl7;
using df = decltype(f);
CL<df, f> cl8; // << error
int main() {
cl8.call();
}
Run Code Online (Sandbox Code Playgroud)
所以(不确定编译器版本):
clang - 3.4 http://rextester.com/UOIV91915
编译,运行,产生输出
g ++ 4.9+ http://coliru.stacked-crooked.com/a/dbec1e202c48fd81
main.cpp:14:9: error: 'void(int)' is not a valid type for a template non-type parameter
CL<df, f> cl8; // << error
^
main.cpp:14:14: error: invalid type in …Run Code Online (Sandbox Code Playgroud)