小编mar*_*inj的帖子

如何使用alignas替换pragma pack?

我试图理解如何使用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)

c++ gcc c++11 alignas

12
推荐指数
1
解决办法
3007
查看次数

widget post()与handler post()有什么区别?

我有一个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,那么一切正常.我在这里错过了什么?

android

6
推荐指数
1
解决办法
1718
查看次数

使用 volatile 使枚举线程安全

我有 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)

java android

5
推荐指数
1
解决办法
5464
查看次数

具有DirectX部分的Metro风格应用程序

Windows 8 API是否允许我编写一个使用XAML进行UI和DirectX渲染3D对象的应用程序?说我正在写一个3D建模应用程序.我想在XAML中创建很多对话框和UI元素,以及使用DirectX渲染的单个矩形窗口.我更喜欢使用C++.这可能吗?

c++ directx xaml microsoft-metro windows-8

4
推荐指数
1
解决办法
1205
查看次数

在调用基类构造函数之前修改构造函数参数值

我有以下类层次结构:

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)

c++

4
推荐指数
1
解决办法
2069
查看次数

Android,Logcat给出了有关SearchView类的错误

我已经安装了支持库,以便在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

4
推荐指数
1
解决办法
2990
查看次数

使用decltype为函数生成的非类型模板参数

我想用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)

c++ templates decltype language-lawyer

3
推荐指数
1
解决办法
212
查看次数